您好我有这个代码替换路径然后运行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
为什么线的其余部分被移除? 感谢
答案 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
包含一个以分号分隔的目录列表,如果当前目录中不存在可执行文件,批处理用于查找可执行文件。你改变它,批量将迅速得到健忘症。同样适用于temp
和tmp
(指向临时目录)和其他一些“保留”名称......