gpt4 book ai didi

windows - Windows 批处理文件中的可变行为

转载 作者:可可西里 更新时间:2023-11-01 11:52:47 24 4
gpt4 key购买 nike

对于与 Windows 相关的任何事情,我都是一个完全的菜鸟,所以我希望这对某人来说是一个简单的问题。如果它有所作为,我正在使用 Win7。

我在 .cmd 文件中有以下代码,我从命令行连续运行两次,生成以下输出:

set /p input_tmp=input something: || set input_tmp=default
echo "input_tmp outside if: %input_tmp%"
if "%input_tmp%"=="default" (
echo "input_tmp inside if: %input_tmp%"
)

-------------output 1---------------
input something: cat
"input_tmp outside if: cat"
-------------output 2---------------
input something: dog
"input_tmp outside if: dog"

但是,当我运行以下代码时...

if not "%~1"=="something" (
set /p input_tmp=input something: || set input_tmp=default
echo "input_tmp outside if: %input_tmp%"
if "%input_tmp%"=="default" (
echo "input_tmp inside if: %input_tmp%"
)
)

-------------output 1---------------
input something: cat
-------------output 2---------------
input something: dog
"input_tmp outside if: cat"

作为 Linux 的 Java 程序员……这让我很困惑。

最佳答案

在批处理文件中,当到达一个代码块(括号内的代码)时,将解析所有 block 并将所有变量读取替换为存储在变量中的值before开始执行代码。如果 block 中的代码更改了变量中的值,则无法从同一 block 中检索到该值,因为读取操作不存在,它已被变量中的值替换。

为避免这种情况,必须/应该使用延迟扩展。这允许在必要时将语法 %var% 更改为 !var!,向解析器指示必须延迟对变量的读取操作,直到命令被执行执行。

setlocal enabledelayedexpansion

if not "%~1"=="something" (
set /p input_tmp=input something: || set input_tmp=default
echo "input_tmp outside if: !input_tmp!"
if "!input_tmp!"=="default" (
echo "input_tmp inside if: !input_tmp!"
)
)

关于windows - Windows 批处理文件中的可变行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25873626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com