2016-06-27 37 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