我目前正在循环播放已知的子文件夹。我想抓取包含我正在寻找的文件的文件夹,但只包含该文件夹的名称,而不是整个路径,最好是在稍后在批处理文件中使用的另一个变量中。 ..
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
任何人都可以指出我失踪的东西?
答案 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!"
)