我在批处理文件中有以下内容:
set path=c:\temp\test
基本上,我想要一个输出,它会给我结果为c:\ temp \。
我没有找到任何类似于bat命令的indexof等效命令。
谢谢。
我在批处理文件中有以下内容:
set path=c:\temp\test
基本上,我想要一个输出,它会给我结果为c:\ temp \。
我没有找到任何类似于bat命令的indexof等效命令。
谢谢。
背景:
>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\
有一个问题让我非常希望 4DOS 仍然存在。但是,我在 alt.msdos.batch.nt
找到了一些可能有用的东西。命令 help set
中的手册页面似乎包含了大部分相同的信息。
set test=123456789
rem extract chars 0-5 from the variable test
set test=%test:~0,5%
echo %test%
你为什么想要那个?
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
朴素的子字符串存在一个问题,即每次路径更改时都必须进行调整,并且它不是解决问题的通用解决方案。
以下批处理文件提供了一个概念证明,说明如何执行路径的截断部分:
@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
子程序,它循环并截断字符串的最后一个字符,直到找到反斜杠。这有效地删除了路径的最后一部分。