gpt4 book ai didi

windows - 批处理文件变量覆盖

转载 作者:可可西里 更新时间:2023-11-01 10:04:44 26 4
gpt4 key购买 nike

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

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%

当我运行批处理文件时,它运行 my_command with out_file=[some_dir_2] 两次,而不是第一次运行 with 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

关于windows - 批处理文件变量覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564240/

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