批处理文件:如何获取文件夹路径的特定部分

时间:2015-03-23 18:00:58

标签: batch-file

我目前正在循环播放已知的子文件夹。我想抓取包含我正在寻找的文件的文件夹,但只包含该文件夹的名称,而不是整个路径,最好是在稍后在批处理文件中使用的另一个变量中。 ..

pause
CD c:\%username%\testFolder\Program\OLD\

For /R %%G in (test.t?t) do Echo %%G

pause

现在,这显示了我正在寻找的文件:C:\ User \ testFolder \ Program \ OLD \ myfile \ exemple1 \ test.txt

我想要的是替换Echo %% G以在变量中设置" unknown"文件夹和子文件夹,

For /R %%G in (test.t?t) do set var1 = myfile\exemple1

任何人都可以指出我失踪的东西?

1 个答案:

答案 0 :(得分:1)

如果您在cmd控制台中for /?,您将在最后几页看到运行时变量。使用%%~dpG表示法,您可以获得匹配文件的完整驱动器\路径规范。然后,使用子字符串替换和延迟扩展,将%CD%替换为空。最后,您可以使用数字子字符串 - !varname:~1,-1!去除前导和尾部反斜杠。

@echo off
setlocal enabledelayedexpansion

cd /d "c:\%username%\testFolder\Program\OLD\"

for /R %%G in (test.t?t) do (
    set "var1=%%~dpG"
    set "var1=!var1:%CD%=!"
    if "!var1!"=="\" (echo .\) else echo(!var1:~1,-1!
)

如果您愿意,只有在前一个匹配不等于当前匹配时,才能通过回显来防止回显重复。

@echo off
setlocal enabledelayedexpansion

cd /d "c:\%username%\testFolder\Program\OLD\"

for /R %%G in (test.t?t) do (
    set "var1=%%~dpG"
    set "var1=!var1:%CD%=!"
    if not "!var1!"=="!prev!" (
        if "!var1!"=="\" (echo .\) else echo(!var1:~1,-1!
    )
    set "prev=!var1!"
)