smw*_*dia 2 scripting cmd batch-file
我的工作目录中有1.txt和2.txt.我使用以下批处理列出所有文件.
批次是这样的:
@echo off
for /f "tokens=*" %%a in ('dir *.txt /b') do (
echo ---------------
set file_variable=%%a
echo file_variable=%file_variable%
echo filename=%%a
)
Run Code Online (Sandbox Code Playgroud)
结果如下:
---------------
file_variable=2.txt <---------------why it is not 1.txt here??
filename=1.txt
---------------
file_variable=2.txt
filename=2.txt
Run Code Online (Sandbox Code Playgroud)
谢谢.
你需要把:
@setlocal enableextensions enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
在您的文件的顶部和
endlocal
Run Code Online (Sandbox Code Playgroud)
在末尾.
然后,您需要使用延迟扩展替换字符.
@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=*" %%a in ('dir *.txt /b') do (
echo ---------------
set file_variable=%%a
echo file_variable=!file_variable!
echo filename=%%a
)
endlocal
C:\Documents and Settings\Pax\My Documents> qq.cmd
---------------
file_variable=1.txt
filename=1.txt
---------------
file_variable=2.txt
filename=2.txt
Run Code Online (Sandbox Code Playgroud)
您没有延迟扩展的情况是for在运行之前正在评估整个循环.这包括替换,因此%file_variable%将替换为循环开始之前保持的值.使用延迟扩展会延迟评估,直到执行实际行.
Rob van der Woude的网站上有各种各样出色的Windows脚本技巧,包含了很多不同的Windows操作方式和各种工具.