我正在尝试查找并替换批处理文件中的字符串值但存在问题。我让用户运行批处理文件并询问用户1)文件所在的驱动器2)TEST父文件夹中文件夹的名称是什么3)新服务器的名称是什么。我希望批处理文件在名为importer.config的文件中查找,并用用户输入的任何内容替换名为server_name的值。这就是我所拥有的:
@echo off
SET drive=
SET /P drive=Please enter the drive:
SET folder=
SET /P folder=Enter name of folder desired:
SET server=
SET /P server=Enter name of new server:
@echo off > newfile.txt
setLocal EnableDelayedExpansion
if exist newfile.txt del newfile.txt
for /f "tokens=* delims= " %%a in (%drive%\test\%folder%\importer.config) do (
set str=%%a
set str=!str:server_name=%server%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config
pause
每次运行此命令时,cmd提示符都会显示: 系统找不到指定的文件c:\ test \ users_input_they_entered \ importer.config。问题是文件存在,所以试图理解我所缺少的内容以及为什么它找不到存在的文件。
然后它还说“找不到c:\ windows \ system32 \ importer.config”,这也不确定为什么会发生这种情况
我搜索了stackoverflow,但无法在任何帮助下解决这个问题。
答案 0 :(得分:1)
你正在使用for循环推动你的运气。
像sed这样的工具可以很好地运作。
如果你看一下这篇文章,他们就有了你可以使用的vbscript实现 Is there any sed like utility for cmd.exe
set input_file=importer.config
set output_file=temp.config
set new_server_name=server1984
cscript /Nologo sed.vbs s/server_name/%new_server_name%/ < %input_file% > %output_file%