2011-04-22 64 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