使用Bat文件将带分号的字符串拆分为分隔符

时间:2016-06-24 16:13:45

标签: batch-file path

我想删除使用批处理的特殊路径。

我无法使用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%生成的字符串吗?

1 个答案:

答案 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