获取当前路径的一部分
Get a part of the current path
我想获取我的批处理脚本所在的当前目录的一部分。
位置是这样的:Y:\abc\def\ghi\jkl\script.bat
我只想保留 Y 后面的内容:\abc\def\ (即 \ghi\jkl)
如何操作?
我正在使用下面的代码获取完整路径,但如何进行定界?
for /f %%a in ("%CD%") do set CURR=%%a
echo %CURR%
感谢您宝贵的帮助。
我相信也许你可以将要剪切的部分放在 txt 文件中,然后从文件中的循环中操作字符串,如下所示:
echo %cd% > path.txt
for /f "tokens=3,* delims=\" %%a in (path.txt) do echo %%b
用参数tokens=3
判断深度,分隔符为"\"
。
根据你说的"directory where my batch script is from",下面应该就够了,(添加最后一行是为了演示目的,请根据需要进行更改):
@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
我已经做到了,如果脚本目录不够深,仍然会输出完整路径。
如果您想使用当前目录而不是脚本位置,请根据需要将 1
行的 %~dp0
更改为 %__CD__%
或 %CD%\
。
@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"
.
我想获取我的批处理脚本所在的当前目录的一部分。
位置是这样的:Y:\abc\def\ghi\jkl\script.bat
我只想保留 Y 后面的内容:\abc\def\ (即 \ghi\jkl)
如何操作?
我正在使用下面的代码获取完整路径,但如何进行定界?
for /f %%a in ("%CD%") do set CURR=%%a
echo %CURR%
感谢您宝贵的帮助。
我相信也许你可以将要剪切的部分放在 txt 文件中,然后从文件中的循环中操作字符串,如下所示:
echo %cd% > path.txt
for /f "tokens=3,* delims=\" %%a in (path.txt) do echo %%b
用参数tokens=3
判断深度,分隔符为"\"
。
根据你说的"directory where my batch script is from",下面应该就够了,(添加最后一行是为了演示目的,请根据需要进行更改):
@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
我已经做到了,如果脚本目录不够深,仍然会输出完整路径。
如果您想使用当前目录而不是脚本位置,请根据需要将 1
行的 %~dp0
更改为 %__CD__%
或 %CD%\
。
@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"
.