试图制作.bat脚本,并需要让一些字符串正常工作.
这是我到目前为止所得到的
@echo off
for /r %%i in (*.csv) do (
set str=%%i
set str=%str:csv=rar%
echo %%i
echo.%str%
)
Run Code Online (Sandbox Code Playgroud)
假设我已经在C:\中运行,并得到5 csv,1.csv,2.csv ... 5.csv
我第一次运行它,得到输出:
C:\1.csv
C:\2.csv
C:\3.csv
C:\4.csv
C:\5.csv
Run Code Online (Sandbox Code Playgroud)
我第二次得到:
C:\1.csv
csv=rar
C:\2.csv
csv=rar
C:\3.csv
csv=rar
C:\4.csv
csv=rar
C:\5.csv
Run Code Online (Sandbox Code Playgroud)
然后我得到所有后续电话:
C:\1.csv
rar=rar
C:\2.csv
rar=rar
C:\3.csv
rar=rar
C:\4.csv
rar=rar
C:\5.csv
Run Code Online (Sandbox Code Playgroud)
当我期待得到的是直接的:
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
Run Code Online (Sandbox Code Playgroud)
所以我删除了替换:
@echo off
for /r %%i in (*.csv) do (
echo %%i
set str=%%i
echo.%str%
)
Run Code Online (Sandbox Code Playgroud)
第一次运行:
C:\1.csv
C:\2.csv
C:\3.csv
C:\4.csv
C:\5.csv
Run Code Online (Sandbox Code Playgroud)
第二轮:
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
Run Code Online (Sandbox Code Playgroud)
它就像在最后一次循环运行之前没有设置str变量,即使它试图回显变量,其中的行在设置之后发生,然后将其保存到下一个循环中?在处理循环的过程中,我是否缺少某些东西?
谢谢
Ben*_*oit 11
你应该用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
Run Code Online (Sandbox Code Playgroud)