按特殊字符'\。'拆分字符串。

时间:2015-02-02 10:31:08

标签: batch-file string-split

我有一个以\.结尾的字符串。我想要的只是\.

之前的字符串

例: 我的字符串是:D:\Work\WelCome\.
输出字符串应为:D:\Work\WelCome

如果您发现此问题非常笼统,请原谅。我通过特殊字符搜索分裂字符串的网,但没有得到预期的结果。

我不是批处理脚本的新手,但不够专家。

3 个答案:

答案 0 :(得分:2)

作为一个文件/文件夹路径,让os为你解决它比分割字符串更简单(如果你只需要左边部分)

for %%a in ("D:\Work\WelCome\.") do echo %%~fa

在理论情况下,结束点可以包含附加数据(但不能包含反斜杠),这可以转换为

rem The string with more data
set "myString=D:\Work\WelCome\.blah"

for %%a in ("%myString%.@\..") do echo %%~fa

aditional @确保始终存在附加信息(前一个点结尾的情况仍然有效),for命令将看到文件引用,我们只需要获取引用到父文件夹。

但是请注意,这只是一种清理文件/文件夹引用的方法,而不是将字符串拆分为精确字符的方法。

有一个简单的解决方案来分割字符串(或更准确地说,删除后缀)

@echo off
    setlocal enableextensions disabledelayedexpansion

rem The string
    set "myString=D:\Work\WelCome\.test"

rem Do the split
    set "myString=%myString:\.="&rem %"
    set "myString=%myString%"

rem Show data 
    echo %myString%

它使用命令连接和注释开始(rem)替换拆分子字符串。所以

set "myString=D:\Work\WelCome\.test"

转换为

set "myString=D:\Work\WelCome"& rem test"

这样,在下一行中,当变量被赋值给自己时,将删除不需要的部分(由rem隐藏)。

答案 1 :(得分:1)

我已经测试了这段代码并且可行:

setlocal enabledelayedexpansion
set p=D:\Work\WelCome\.
set v=
::  v is the output
for %%a in (%p:.= %) do (
  set "v=!v!.%%~a"
  set q=%%~a
  if "!q:~-1!"=="\" goto :end
)
:end
set v=%v:~1%
set v=%V:~0,-1%
echo %v%

以下是我使用的案例:

C:\> split.bat C:\1\2\3\.
C:\1\2\3

C:\> split.bat C:\1\2\3\.4\5\
C:\1\2\3

C:\> split.bat C:\1\2\3\.4\5\.6\7\8
C:\1\2\3

C:\> split.bat C:\1\2.\ .3.\...4\.5
C:\1\2.\ .3.

C:\> split.bat C:\.1\2\3\4\5\6\7\8\9\
C:

您正在寻找的是什么。如果您想对变量执行更多操作,那么只需echo,就可以在该行之后引用%v%

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL
SET "string=D:\Work\WelCome\."

:: Classic solution if the string is in an environment variable

ECHO %string:~0,-2%

:: solution if the string is in a metavariable

FOR %%z IN ("%string%") DO ECHO %%z becomes %%~dpnz

GOTO :EOF

应该是不言自明的。