我的bat文件中有以下内容。说
设置路径= c:\ temp \ test
所以基本上我想要一个输出,它会给我结果为c:\ temp \
我没有在bat命令中找到任何等效索引。
感谢。
答案 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
子例程,它循环并切断字符串的最后一个字符,直到找到反斜杠。这有效地删除了路径的最后部分。