我是新手使用批处理文件,所以有人可以帮我分割一个我从文件中获取的字符串
我正在使用%USERPROFILE%
来获取我的字符串
字符串是:"C:\Users\nicholas"
我想保留C:\ part
,但要摆脱\Users\nicholas
部分。
答案 0 :(得分:1)
for /f "tokens=2 delims=\" %A in ('set userprofile') do echo %A\
参见/?
另外
echo %userprofile:~0,3%
答案 1 :(得分:0)
如果您仔细阅读set /?
的输出,您将找到答案:
也可以指定扩展的子字符串。
%PATH:~10,5%
会扩展PATH环境变量,然后只使用5 从展开的第11个(偏移10)字符开始的字符 结果
因此,您可以使用类似的东西来获取字符串的前3个字符:
> echo %userprofile:~0,3%
C:\
答案 2 :(得分:0)
我由于您需要用户所在的驱动器,您可以直接使用
%systemdrive%
变量 - 这是安装Windows的驱动器
II 从路径获取驱动器的最简单方法:
for %%a in ("%userprofile%") do echo %%~da\
%~da
- 仅扩展其驱动器的路径
III 过于复杂但功能强大的方式(可用于不同事物的分割功能):
@echo off
call :split "%userprofile%" "\" 1 drive
echo %drive%\
goto :eof
:split [%1 - string to be splitted;%2 - split by;%3 - possition to get; %4 - if defined will store the result in variable with same name]
::http://ss64.org/viewtopic.php?id=1687
setlocal EnableDelayedExpansion
set "string=%~2%~1"
set "splitter=%~2"
set /a position=%~3
set LF=^
rem ** Two empty lines are required
echo off
for %%L in ("!LF!") DO (
for /f "delims=" %%R in ("!splitter!") do (
set "var=!string:%%~R%%~R=%%~L!"
set "var=!var:%%~R=%%~L!"
if "!var!" EQU "!string!" (
echo "%~1" does not contain "!splitter!" >&2
exit /B 1
)
)
)
if "!var!" equ "" (
endlocal & if "%~4" NEQ "" ( set "%~4=")
)
if !position! LEQ 0 ( set "_skip=" ) else (set "_skip=skip=%position%")
for /f "eol= %_skip% delims=" %%P in (""!var!"") DO (
if "%%~P" neq "" (
set "part=%%~P"
goto :end_for
)
)
set "part="
:end_for
if not defined part (
endlocal
echo Index Out Of Bound >&2
exit /B 2
)
endlocal & if "%~4" NEQ "" (set %~4=%part%) else echo %part%
exit /b 0