2011-04-22 62 views
4

我想編寫一個腳本來獲取目錄中的所有文件名,並排除文件名以全部結尾。如何在循環中獲取局部變量的子串?

我已經想出了下面的腳本,但它不工作,有誰能幫助我嗎?執行循環的身體之前

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf 
    if not %CURRENT_TESTCASE:~-3%==all (
     echo %%~nf >> "%FILELIST%" 
    ) 
) 

回答

7

CURRENT_TESTCASE變量進行評價。 (這就是命令處理器如何處理含有偏見的複合命令。)

爲了防止過早地評估變量,您需要在本地啓用變量的delayed expansion並稍微更改語法。這是如何:

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf 
    setlocal EnableDelayedExpansion 
    if not !CURRENT_TESTCASE:~-3!==all (
     echo %%~nf >> "%FILELIST%" 
    ) 
    endlocal 
) 
+0

你不應該這樣做*外*循環?或者它也在裏面工作? – Mehrdad 2011-04-22 05:24:08

+2

您可以爲腳本的任何部分啓用/禁用延遲擴展。通常需要限制其操作範圍,以避免在不需要的情況下意外地使用'!'。 – 2011-04-22 05:34:24

+0

@Mehrdad:有用,謝謝 – eric2323223 2011-04-22 06:41:52