我想删除使用批处理的特殊路径。
我无法使用import java.awt.*;
import javax.swing.*;
public class Test{
private JFrame f;
public Test(){
f = new JFrame() {
public void paint(Graphics g){
g.drawLine(0,480,960,480);
}
};
f.setSize(960,960);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String []args){
Test t = new Test();
}
}
,因为set somevar=" %path:specialstr=%"
具有动态部分。我可以使用批处理从specialstr
这样的大字符串中删除由%cd%
生成的字符串吗?
答案 0 :(得分:1)
关注Dennis van Gils' advice,使用Delayed Expansion,如下所示:
SETLOCAL EnableExtensions EnableDelayedExpansion
set "specialstr=%CD%\"
set "somevar=!path:;%specialstr%;=;!"
如果由于某种原因无法使用延迟展开,请使用call set
(阅读Advanced usage : CALLing internal commands):
%path%
变量中的某些部分路径包含兼性尾随反斜杠,而其他路径则不包含。call set "somevar=%%path:;%specialstr%;=;%%"
最常见的用法。call set "somevar=%%path:;%specialstr%=%%"
如果;%specialstr%
落后于%path%
,但要注意,Variable Edit/Replace 贪婪,请使用替换;%specialstr%
中%path%
的所有出现次数。call set "somevar=%%path:%specialstr%;=%%"
如果%specialstr%;
领导%path%
,但小心 同样谨慎,则使用示例脚本:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
where p.bat
pushd "C:\Utils"
set "specialstr=%CD%\"
popd
echo specialstr=%specialstr%
echo path end=...%path:~-46%
call set "somevar=%%path:;%specialstr%=%%"
echo somevar end=...%somevar:~-36%
SETLOCAL
set "path=%somevar%"
echo path end=...%path:~-36%
where p.bat
ENDLOCAL
where p.bat
输出(仅显示%path%
和%somevar%
变量的一些尾随字符,以提高可读性:
==> D:\bat\SO\38017804.bat
C:\Utils\p.bat
specialstr=C:\Utils\
path end=...Microsoft SQL Server\120\Tools\Binn\;C:\Utils\
somevar end=...Microsoft SQL Server\120\Tools\Binn\
path end=...Microsoft SQL Server\120\Tools\Binn\
INFO: Could not find files for the given pattern(s).
C:\Utils\p.bat