我想获得我的批处理脚本所在的当前目录的一部分。
位置类似于:Y:\ abc \ def \ ghi \ jkl \ script.bat
我只想保留Y:\ abc \ def \(即\ ghi \ jkl)之后的内容
如何执行此操作?
我正在使用下面的代码来获取完整路径,但是如何进行定界?
for /f %%a in ("%CD%") do set CURR=%%a
echo %CURR%
感谢您的宝贵帮助。
答案 0 :(得分:0)
我相信您也许可以将要剪切的部分放在txt文件中,然后从文件中的循环操作字符串,如下所示:
echo %cd% > path.txt
for /f "tokens=3,* delims=\" %%a in (path.txt) do echo %%b
使用参数tokens=3
确定深度,分隔符为"\"
。
答案 1 :(得分:0)
根据您所说的“我的批处理脚本所在的目录”,以下内容就足够了:(最后一行用于演示,请根据需要进行更改):
@Set "x=%~dp0"&SetLocal EnableDelayedExpansion
@Set "i=0"&Set "x!i!=%x:\="&Set /A i+=1&Set "x!i!=%"
@Set /A i-=1,y=i-1
@If %i% Lss 1 (Set "z=%x0%\")Else (If %i% Equ 1 (Set "z=%x0%\%x1%"
)Else Set "z=!x%y%!\!x%i%!")
@EndLocal&Set "y=%z%"
@Echo %x% becomes %y%&Pause
我这样做的目的是,如果脚本目录不够深,仍将输出完整路径。
如果要使用当前目录而不是脚本位置,请根据需要将第%~dp0
行的1
更改为%__CD__%
或%CD%\
。
答案 2 :(得分:0)
@echo off
setlocal
set "reversed="
set "fromdir=%~dp0"
for %%A in ("%fromdir:\=" "%") do call set "reversed=%%~A\%%reversed%%"
for /f "tokens=1-2 delims=\" %%A in ("%reversed%") do set "result=\%%B\%%A"
echo %result%
pause
如果路径段可以反转,则获取最后2个段是用于设置1-2
的标记选项的已知数字,因为它们将成为第2个段。第一个for
循环执行反向操作。第二个for
循环获取第一个2个令牌,并以相反的顺序(原始顺序)设置为result
。
fromdir
是为脚本目录%~dp0
设置的,尽管如果需要也可以用%cd%
设置。
查看set /?
,了解"%fromdir:\=" "%"
如何用\
替换" "
,以便路径段成为单个参数,即"C:\dir1\dir2\dir3"
变成"C:" "dir1" "dir2" "dir3"