批处理文件中的拆分字符串

时间:2015-04-20 04:01:43

标签: batch-file

我是新手使用批处理文件,所以有人可以帮我分割一个我从文件中获取的字符串 我正在使用%USERPROFILE%来获取我的字符串 字符串是:"C:\Users\nicholas"
我想保留C:\ part,但要摆脱\Users\nicholas部分。

3 个答案:

答案 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