尝试制作.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变量,即使它试图回显变量,其中的行在设置之后发生,然后将其保存到下一个循环中?在处理循环的过程中,我是否缺少某些东西?
由于
答案 0 :(得分:10)
您应该使用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