2016-06-27 92 views
0

我想从目录中收集第一个文件然后处理该文件。但是,当时的运行和处理批处理文件,我无法将值存储在文件名Windows批处理:重置变量

在可变第二次是示例代码:

for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
set filename=%%i 
set newname=%filename:~14% 
set transname=%filename:~25% 
goto tests 
) 
:tests 
echo %filename% 
echo %newname% 
echo %transname% 

我相信我们有使用一种叫做SETLOCAL的东西,但是我无法在上面的代码中做到这一点。

任何帮助!

+1

著名[延迟扩展陷阱(http://stackoverflow.com/a/30284028/2152082)... – Stephan

回答

1

您应该避免在块和FOR块中扩展百分比,因为扩展只在块被解析时才会出现一次。

for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
set filename=%%i 
goto :tests # Get only the first file 
) 
exit /b 

:tests 
set newname=%filename:~14% 
set transname=%filename:~25% 
echo %filename% 
echo %newname% 
echo %transname% 
exit /b 

正如@Stephan指出的,你也可以在块内部使用延迟扩展。

setlocal EnableDelayedExpansion 
for /R C:\abcde_efghij\ab_abcabca %%i IN (*.*) DO (
    set filename=%%i 
    set newname=!filename:~14! 
    set transname=!filename:~25! 

    goto :tests # Get only the first file 
) 
+0

为“收集第一文件”时,'goto'旨在中断环路。 – Stephan

+0

@Stephan是的。我修改了'goto'而不是'call'。谢谢 – nawazlj

+0

@Stephan你说得对,我应该仔细阅读文本 – jeb