批处理文件 - 通过从另一个中减去一个字符串变量来获取子路径?

时间:2014-09-14 06:15:22

标签: variables batch-file substring dos

我正在编写一个批处理文件,它将一些根路径(没有文件名)存储在一个变量中。例如:

set ROOT="C:\Program Files(x86)\Some Program\"

在批处理文件的另一部分中,我正在遍历根路径中包含的所有EXE文件及其所有子目录:

pushd !ROOT!
for /R "." %%F in (*.exe) do (
...
)

因此,例如,假设程序目录结构包含以下内容:

C:\Program Files(x86)\Some Program\prog.exe
C:\Program Files(x86)\Some Program\bin\run.exe
C:\Program Files(x86)\Some Program\bin\help\tuturial.exe
C:\Program Files(x86)\Some Program\lib\xfg.exe

然后for循环中%% F的值将是这4个完全限定的路径。

我想要做的是从根目录开始,到达%% F中的最后一个目录名称。例如,如果%% F为:

C:\Program Files(x86)\Some Program\bin\help\tuturial.exe

ROOT 是:

C:\Program Files(x86)\Some Program\

如何减去两个变量以得出结果:

\bin\help\

换句话说:

     %%F = C:\Program Files(x86)\Some Program\bin\help\tuturial.exe
- !ROOT! = C:\Program Files(x86)\Some Program\
= -----------------------------------------------------------------
                                             \bin\help\

谢谢,

P.S。请注意,我正在使用延迟扩展,因此!而不是%为变量ROOT。

更新

我在这里非常接近。我能够进行字符串操作,但有一个条件,我必须"硬编码"我要删除的子字符串。如果我尝试将子字符串放在变量中它就不会起作用。这是我的批处理文件:

set ROOT="C:\Program Files(x86)\Some Program\"
....
pushd !ROOT!
for /R "." %%F in (*.exe) DO (
    set CURR=%%~dpF

    set "X1=!CURR:C:\Program Files(x86)\Some Program\=!"       

    set TEMP="C:\Program Files(x86)\Some Program\"
    set "X2=!CURR:!TEMP!=!"

    ECHO X1=!X1!
    ECHO X2=!X2!
)

对于CURR = C的测试用例:\ Program Files(x86)\这里有一些Program \ bin \ help \ tutorial.exe输出:

X1=bin\help\
X2=TEMP

因为你可以看到使用变量来保存子字符串似乎不起作用(我可能会做一些明显错误的事情。)

无论如何,我会继续努力。 :)

1 个答案:

答案 0 :(得分:1)

在批处理文件中使用%string:SEARCH=REPLACE%格式。有关更多信息,请访问:http://scripts.dragon-it.co.uk/scripts.nsf/docs/batch-search-replace-substitute!OpenDocument&ExpandSection=3&BaseTarget=East&AutoFramed

相关问题