我正在编写一个批处理文件,它将一些根路径(没有文件名)存储在一个变量中。例如:
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
因为你可以看到使用变量来保存子字符串似乎不起作用(我可能会做一些明显错误的事情。)
无论如何,我会继续努力。 :)
答案 0 :(得分:1)
在批处理文件中使用%string:SEARCH=REPLACE%
格式。有关更多信息,请访问:http://scripts.dragon-it.co.uk/scripts.nsf/docs/batch-search-replace-substitute!OpenDocument&ExpandSection=3&BaseTarget=East&AutoFramed