【问题标题】:Cmd : not evaluating variables inside a loopCmd:不在循环内评估变量
【发布时间】:2010-10-21 12:45:58
【问题描述】:

正在尝试制作一个 .bat 脚本,并且需要让一些字符串正常工作。

这就是我目前所拥有的

@echo off
for /r %%i in (*.csv) do (
set str=%%i
set str=%str:csv=rar%
echo %%i
echo.%str%
)

假设我在 C:\ 中运行了这个,得到了 5 个 csv、1.csv、2.csv... 5.csv

第一次运行时,我得到以下输出:

C:\1.csv

C:\2.csv

C:\3.csv

C:\4.csv

C:\5.csv

我第二次得到:

C:\1.csv
csv=rar
C:\2.csv
csv=rar
C:\3.csv
csv=rar
C:\4.csv
csv=rar
C:\5.csv

然后我得到的所有后续电话:

C:\1.csv
rar=rar
C:\2.csv
rar=rar
C:\3.csv
rar=rar
C:\4.csv
rar=rar
C:\5.csv

当我期望得到的是直接通过时:

C:\1.csv
C:\1.rar
C:\2.csv
C:\2.rar
C:\3.csv
C:\3.rar
C:\4.csv
C:\4.rar
C:\5.csv
C:\5.rar

所以我删除了替换:

@echo off
for /r %%i in (*.csv) do (
echo %%i
set str=%%i
echo.%str%
)

第一次运行:

C:\1.csv

C:\2.csv

C:\3.csv

C:\4.csv

C:\5.csv

第二次运行:

C:\1.csv
C:\5.csv
C:\2.csv
C:\5.csv
C:\3.csv
C:\5.csv
C:\4.csv
C:\5.csv
C:\5.csv
C:\5.csv

这就像它直到循环的最后一次运行才设置 str 变量,即使它试图回显变量,该变量的行出现在设置之后,然后将其保存到下一个循环?我在处理循环的方式上有什么遗漏吗?

谢谢

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

您应该使用setlocal enabledelayedexpansion。实际上,%str:csv=rar% 的内容在循环运行之前只被评估一次。所以:

@echo off
setlocal enabledelayedexpansion
for /r %%I in (*.csv) do (
set str=%%i
set str=!str:csv=rar!
echo %%i
echo.!str!
)
endlocal

【讨论】:

  • 这是批处理文件的常见问题......几个月前我被这个欺骗了......
猜你喜欢
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2021-08-28
  • 2020-11-17
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多