substring using bat命令

时间:2010-04-22 11:38:30

标签: substring batch-file

我的bat文件中有以下内容。说

设置路径= c:\ temp \ test

所以基本上我想要一个输出,它会给我结果为c:\ temp \

我没有在bat命令中找到任何等效索引。

感谢。

4 个答案:

答案 0 :(得分:5)

背景:

>set fullname=c:\mypath\oldfile
>set changedname=%fullname:oldfile=newfile%
>echo %changedname%
c:\mypath\newfile

适用于问题:

> set fullname=c:\mypath\oldfile
> set pathonly=%fullname:oldfile=%
> echo %pathonly%
c:\mypath\

答案 1 :(得分:3)

真正让我怀疑的问题4DOS仍然存在。但是,我在alt.msdos.batch.nt找到了可能有用的东西。 set的手册页似乎包含大部分相同的信息。 (命令help set

set test=123456789

rem extract chars 0-5 from the variable test
set test=%test:~0,5%

echo %test%

(注意:在Windows XP SP3上测试)

答案 2 :(得分:1)

为什么要这样?

Johannes'回答是一种可能的解决方案,但是您引用的路径可能(或可能)作为参数传递给脚本,在这种情况下,您可以使用以下语法:

REM Extracts the drive and path from argument %1
SET p=%~dp1

或者,您可以组合..和脚本路径(%0):

REM Sets p to a sibling of the script directory
SET p=%~dp0..\test

答案 3 :(得分:0)

Naïve子字符串存在的问题是,每次路径更改时都必须调整它们,并且它不是问题的通用解决方案。

以下批处理文件提供了如何执行路径截断部分的概念验证:

@echo off
set foo=C:\Temp\Test
call :strip
echo %foo%
goto :eof

:strip
if not "%foo:~-1%"=="\" (
    set foo=%foo:~0,-1%
    goto :strip
)
goto :eof

它被硬编码为单个变量,但如果需要,可以很容易地修复。

这里的核心部分是strip子例程,它循环并切断字符串的最后一个字符,直到找到反斜杠。这有效地删除了路径的最后部分。