批量删除字符串中的字符

批量删除字符串中的字符

例如,我有以下路径: "C:\Windows\Example\001 Example\005 Example" 我必须从此字符串中提取"005 Example"。我已尝试使用"set path=%path:~0,11%",但路径也可以是"C:\Windows\Example\001 Example\005 Example_2"

我需要的是在最后一个“\”后剪切字符串

我怎样才能做到这一点?

答案1

首先,不要将其用作path变量名。Windows 命令提示符(与 Unix 的大多数组件(包括 shell)不同)以不区分大小写的方式处理变量名,因此path与 相同PATH,这是您的执行搜索路径,如果您为其分配一些随机的东西,那么您将陷入困境。

使用表格。(我假设您知道记录这些表格。)这是替换:%variable:str1=str2%set /?

C:\> set play=food

C:\> echo %play:foo=bar%
bard

C:\> set animal=cat

C:\> echo %animal:at=ow%
cow

这支持非常有限模式匹配功能; 将查找并删除所有内容,包括第一次出现的%variable:*str1=str2%str1 并将其替换为str2。特别是,将用 null替换直到第一个为止的所有内容。例如,如果是,则将计算为 (不带)。如果您的路径名始终有四个级别,您可以这样做%variable:*\=%\%pathname%C:\Windows\Example\001 Example\005 Example%pathname:*\=%Windows\Example\001 Example\005 ExampleC:\

for %%I in (%pathname%) do set tempname=%%~I
set tempname=%tempname:*\=%
set tempname=%tempname:*\=%
set tempname=%tempname:*\=%
set tempname=%tempname:*\=%
set basename=%tempname%
echo %basename%

for语句有点混乱。它是一个循环,保证只执行一次,索引变量%%I设置为值%pathname%1。然后它分配%%~Itempname。  %%~I是 的值%%I(即 的值%pathname%),但如果该字符串以引号 ( ") 字符开头和结尾,则会将其删除。如果您确定%pathname%不以引号开头和结尾(例如,因为您已经这样做了,或者做了类似的事情),您可以跳过此步骤,只需说 即可set tempname=%pathname%

如果路径名的层数不确定,则

for %%I in (%pathname%) do set tempname1=%%~I
:loop
set tempname2=%tempname1:*\=%
if not %tempname1% == %tempname2% ( set tempname1=%tempname2% & goto loop )
set basename=%tempname1%
echo %basename%

循环直到没有\s 为止。______________
1 实际上,如果为空,或者包含通配符(模式匹配)字符(如和)
其行为可能会更复杂。可能还有其他我尚未发现的特殊情况。(如果有更简洁的方式来处理引号,请告诉我。)%pathname%?*


警告:我观察 到如果为空则行为会很奇怪。%variable:str1=str2%%variable%

相关内容