cd E:\Department\Finance\edi\Japan_orders\
FOR /f %%i IN ('dir /b *.*') DO (
copy %%i E:\Department\Finance\Edi\commsfile.txt
set LIST=%%i
echo %LIST%
if %%i == FORD110509 CALL E:\Department\Finance\edi\EXTRACT.exe E:\Department\Finance\edi\COMMSFILE.TXT
)
pause
提前致谢
答案 0 :(得分:2)
您需要延迟扩展。在程序开头添加以下内容:
setlocal enabledelayedexpansion
然后在循环中使用!LIST!
而不是%LIST%
。
如需详尽说明,请阅读help set
。
答案 1 :(得分:2)
完全解析括号内的命令块,并在之前完成它们的执行。因此,%LIST%
表达式在开头展开,而LIST
变量仍为空。当执行echo %LIST%
时,那里不再有%LIST%
,而是只有空字符串(读:'nothing')。这就是它的工作原理(不要问我为什么)。
在这种情况下使用了延迟扩展机制,Joey已经告诉过你需要使用!LIST!
而不是%LIST%
的特殊语法,必须先启用它(通常是命令SETLOCAL EnableDelayedExpansion
,他也提到过。
另一方面,可以从值中提取子字符串,但必须先将值存储到变量中。基本上,提取子字符串的语法是:
%VARIABLE:~offset,charcount%
%VARIABLE:~offset%
也就是说,您要指定起始位置(从0开始),并且可选地指定要从该值中剪切的字符数。 (如果省略quantity
,那么你只是在偏移处切割源字符串到最后。)你可以通过从命令行发出HELP SET
来阅读更多关于它的信息(等等,这是同样的命令,乔伊提到了!)。
还有一件事:不要忘记延迟扩张。您需要将上述%
语法更改为!
语法。在您的情况下,检索前4个字符的正确表达式为:
!LIST:~0,4!
您可以直接使用它,也可以先将其存储回LIST
,然后在需要子字符串的地方使用!LIST!
。