需要在批处理文件中将文本从一个文件复制到另一个文件

时间:2016-04-12 09:55:57

标签: batch-file copy

需要将文本从一个文件复制到另一个文件。 file1如下:

locked/agent.jms.remote.host=<AGENTHOST>
locked/agent.jms.remote.port=<AGENTPORT>

file2将是

locked/agent.jms.remote.host=mkdfvsh_a-2341
locked/agent.jms.remote.port=1234

&amp;在创建第二个文件时需要替换

我使用的

命令:

SET newfile=file2
SEt filetoCOpy=file1

for /f "tokens=*" %%i in (%filetoCOpy%) do (
  SET "line=%%i"
  SETLOCAL EnableDelayedExpansion
  SET line=!line:<AGENTHOST>=%AGENTHOST%!
  SET line=!line:<AGENTPORT>=%AGENTPORT%!


      echo !line!>>%newfile%
)

我得到的结果

locked/agent.jms.remote.host=<AGENTHOST>
locked/agent.jms.remote.port=<AGENTPORT>

变量值不变。

有人可以在这里帮忙吗?

2 个答案:

答案 0 :(得分:0)

您发布的代码应该会出错。 <>被视为重定向,除非它们被转义或引用:

SET line=!line:^<AGENTHOST^>=%AGENTHOST%!
SET line=!line:^<AGENTPORT^>=%AGENTPORT%!

SET "line=!line:<AGENTHOST>=%AGENTHOST%!"
SET "line=!line:<AGENTPORT>=%AGENTPORT%!"

但是你仍然至少有一个问题 - 如果你在循环中启用延迟扩展,那么你必须在循环结束时使用ENDLOCAL,否则你可能会用完SETLOCAL堆栈空间。

另外,我没有看到AGENTHOST或AGENTPORT的定义。

答案 1 :(得分:0)

你可以尝试这样的事情:

@echo off
SET newfile=file2.txt
SEt filetoCOpy=file1.txt
set "ReplaceString1=mkdfvsh_a-2341"
set "ReplaceString2=1234"
If exist %newfile% Del %newfile%

for /f "tokens=*" %%i in (%filetoCOpy%) do (
  SET "line=%%i"
  SETLOCAL EnableDelayedExpansion
  SET line=!line:^<AGENTHOST^>=%ReplaceString1%!
  SET line=!line:^<AGENTPORT^>=%ReplaceString2%!
      echo !line!>>%newfile%
)
EndLocal
start "" %newfile%