Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件变量覆盖_Windows_Batch File - Fatal编程技术网

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调用会导致命令解析两次吗?很好。