字符串替换但不复制整行

时间:2013-12-20 22:08:15

标签: windows batch-file

您好我有这个代码替换路径然后运行iexpress来构建一个exe。

@echo off
set PATH=PATH
set FOLDER=FOLDER
set NEWPATH=%~dp0
set TARGET=%NEWPATH%install_32bitWindows.EXE
echo %TARGET%
setlocal enabledelayedexpansion
for /f "tokens=2*" %%i in (install_32bitWindows.SED) do (
    set str=%%i
    echo %str%
    set str=!str:%PATH%=%TARGET%!
    set str=!str:%FOLDER%=%NEWPATH%!
    echo !str! >> newfile
)
del install_32bitWindows.SED
rename newfile install_32bitWindows.SED
C:/Windows/SysWOW64/iexpress.exe /N %~dp0install_32bitWindows.SED

替换是正确完成的,但我的问题是其中一行是空格,空格之后的所有内容都没有这样复制:

最初

AppLaunched=c:\windows\system32\cscript.exe "install_32bitWindows.vbs"

脚本之后:

AppLaunched=c:\windows\system32\cscript.exe

为什么线的其余部分被移除? 感谢

2 个答案:

答案 0 :(得分:0)

因为第二个之后的所有标记都会连接到隐含的%%j变量中,而这个变量并不是指任何地方。

我不确定正确的处理方式是什么,但这应该指向正确的方向:

>> newfile echo !str! %%j

我已将重定向移到命令的开头,以便>>之前的空格不会虚假地插入到输出文件中。小东西,但为什么不准确?

答案 1 :(得分:0)

如果没有样本数据,这就变成了猜谜游戏。

假设您的原始... SED文件包含

string=anotherstring

并且您希望在该文件中替换不同的某些固定字符串,然后

for /f "tokens=1*delims==" %%i in (install_32bitWindows.SED) do (
set str=%%j

(注意:1*%%j

应该工作但是......

您似乎将新创建的文件替换为原始文件,但新文件将无法启动string=,因为您不输出该部分。如果你想要string=newstring那么

echo %%i=!str! >> newfile

最后,在批处理中使用PATH作为用户变量是一个非常糟糕的主意。 PATH包含一个以分号分隔的目录列表,如果当前目录中不存在可执行文件,批处理用于查找可执行文件。你改变它,批量将迅速得到健忘症。同样适用于temptmp(指向临时目录)和其他一些“保留”名称......