繁体   English   中英

批处理文件变量覆盖

[英]Batch file variable overwrite

我正在创建一个批处理文件来运行命令。 我将命令设置如下。

set my_command=some_command %out_file%

然后,我使用不同的out_file变量运行(或打算)命令

set out_file=[some_dir_1]
%my_command%

set out_file=[some_dir_2]
%my_command%

当我运行批处理文件时,它将使用out_file = [some_dir_2]两次运行my_command,而不是第一次使用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 !out_file! ,因此带有逃逸的感叹号。 当您使用echo !my_command! ,您将看到其中包含感叹号。 但是,当您使用%my_command% ,感叹号将在%符号后读取,因此它会看到另一个变量要扩展。

您可以想象这样的批解析顺序:

  1. %var%类的变量扩展为其值
  2. 扩展变量!var! 他们的价值

首先,解析器看到

%my_command%

变成

some_command!out_file!

但是, 然后 (出于某种原因,它被称为延迟扩展)开始检查感叹号并将其更改为

some_command [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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM