I got 1.txt and 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
)
结果如下:
---------------
file_variable=2.txt <---------------why it is not 1.txt here??
filename=1.txt
---------------
file_variable=2.txt
filename=2.txt
Thanks.
你需要输入:
@setlocal enableextensions enabledelayedexpansion
在你的文件的顶部和
endlocal
在最后。
那么就需要使用延迟扩展替换字符。
@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
在没有延迟扩展的情况下,您会看到整个for
循环在运行前被评估。这包括替换,因此%file_variable%
将被替换为它所持有的值before循环开始了。使用延迟扩展可以推迟评估,直到执行实际的行。
这里有各种精彩的 Windows 脚本技巧罗布·范德沃德的网站 http://www.robvanderwoude.com/,包含在 Windows 下使用各种工具执行操作的多种不同方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)