我有一个以\.
结尾的字符串。我想要的只是\.
例:
我的字符串是:D:\Work\WelCome\.
输出字符串应为:D:\Work\WelCome
如果您发现此问题非常笼统,请原谅。我通过特殊字符搜索分裂字符串的网,但没有得到预期的结果。
我不是批处理脚本的新手,但不够专家。
答案 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
应该是不言自明的。