2014-02-11 20 views
0

我需要从Windows批处理脚本中的字符串中的单词开始删除所有内容。 例如,如果我有字符串:批量替换字符串中的正则表达式

This is my line delete from here. 

我想删除一切以单词删除,我需要获得:

This is my line. 

我已经tryed这一点:

set line="This is my line delete from here" 
set word="delete" 
set delete="!word!*"; 
set line=!line:%delete%=! 

它不工作,我尝试了,我已经激活延迟扩展,我不知道这是否:“set line =!line:%delete%=!”作品。我也试过这个“set line =!line:!delete!=!”但也不起作用。我是批处理脚本新手。

UPDATE: 在一个循环我只能做延迟扩张,该代码不起作用:

@ECHO OFF 

setlocal 
for /F "delims= " %%A in (temp.txt) do ( 
    set "line=This is my line delete from here" 
    ECHO original:%line%: 
    set "word=delete" 
    CALL set "delete=%%line:*%word%=%%" 
    ECHO delete the "%word%%delete%" part 
    CALL set "line=%%line:%word%%delete%=%%" 
    ECHO final :%line%: 
) 
endlocal 

输出:

original:: 
=%" was unexpected at this time. 
delete the "" part 
=%" was unexpected at this time. 
final :: 

但如果我删除了从代码以上,输出是:

original:This is my line delete from here: 
delete the "delete from here" part 
final :This is my line : 

我的问题是我怎么能在循环中做同样的事情,用d消除扩张,正常扩张。换言之,我需要在替换表达式中的内部和外部(设置“delete =!line:*!word!=!”,不起作用)两个变量的后期扩展。我找不到任何文件。 谢谢。

回答

1
@ECHO OFF 
SETLOCAL 
set "line=This is my line delete from here" 
ECHO original:%line%: 
set "word=delete" 
CALL set "delete=%%line:*%word%=%%" 
ECHO delete the "%word%%delete%" part 
CALL set "line=%%line:%word%%delete%=%%" 
ECHO final :%line%: 

GOTO :EOF 

这应该告诉你的步骤。

首先,删除包含该单词的部分。然后删除该字和其余行(在delete中)

请注意报价的位置 - 控制set而不是分配的值。

+0

谢谢您的回答。这在单独的批处理脚本中起作用,但是如果将其包含在内部,则它不起作用。在我的内部,我只能做延迟扩展,并且我不知道如何翻译此代码以适应延迟扩展。 –

+0

如果我们掌握了所有的细节,这些问题总是更容易,否则它会成为一系列永无止境的补充问题,可能会严重影响所采取的方法。 – Magoo

+0

我不能在我的代码中扩展像这样的变量%var%,但是像这样!var !,我想知道哪种语法只是通过使用延迟扩展来删除子字符串。 –

0

我已阅读并this基于Magoo的答案更新后的代码:

@ECHO OFF 

setlocal 
for /F "delims= " %%A in (temp.txt) do ( 
    set "line=This is my line delete from here" 
    set "word=delete" 
    echo line is: !line! 
    for /f "delims=" %%a in ("!word!") do set delete=!line:*%%a=! 
    echo delete is: !delete! 
    for /f "delims=" %%a in ("!word!!delete!") do set line=!line:%%a=! 
    echo line is: !line! 
) 
endlocal