Windows 批处理文件变量覆盖
我正在创建一个批处理文件以运行命令。我设置命令如下Windows 批处理文件变量覆盖,windows,batch-file,Windows,Batch File,我正在创建一个批处理文件以运行命令。我设置命令如下 set my_command=some_command %out_file% 然后,我使用不同的out_文件变量运行(或打算运行)该命令 set out_file=[some_dir_1] %my_command% set out_file=[some_dir_2] %my_command% 当我运行批处理文件时,它会在out_file=[some_dir_2]的情况下运行两次我的_命令,而不是在out_file=[some_dir_1]
set my_command=some_command %out_file%
然后,我使用不同的out_文件变量运行(或打算运行)该命令
set out_file=[some_dir_1]
%my_command%
set out_file=[some_dir_2]
%my_command%
当我运行批处理文件时,它会在out_file=[some_dir_2]的情况下运行两次我的_命令,而不是在out_file=[some_dir_1]的情况下第一次运行
有没有一种方法可以每次都用不同的var reset运行相同的命令
谢谢。这似乎有效:
@echo off
setlocal EnableDelayedExpansion
set my_command=some_command ^^!out_file^^!
set out_file=[some_dir_1]
echo %my_command%
set out_file=[some_dir_2]
echo %my_command%
pause
这是通过将my_command
的值设置为some_command来实现的!出文件代码>,因此带有转义感叹号。当您使用echo!我的命令代码>,您将看到它包含感叹号。但是,当您使用%my_command%
时,感叹号会在%号之后读取,因此它会看到另一个要展开的变量
您可以想象这样的批处理解析顺序:
将变量如%var%
展开为其值
展开变量,如!瓦尔代码>到它们的值
首先,解析器看到
%我的命令%
变成什么
一些命令!出文件
但是,它开始检查感叹号并将其更改为
some_命令[some_dir_2]
编辑
我注意到这也很有效:
@echo off
setlocal EnableDelayedExpansion
set "my_command=some_command ^!out_file^!"
set "out_file=[some_dir_1]"
echo %my_command%
set "out_file=[some_dir_2]"
echo %my_command%
pause
@ScottF增加了更好的解释。@ScottF改进了一点。另一种方法:set my_command=some_command%%out_file%%
&set_file=[some_dir_1]
&调用echo%my_command%
@Aacini调用会导致命令解析两次吗?很好。