批处理文件传递变量并更改TXT文件

时间:2014-05-05 19:18:12

标签: batch-file

我需要通过批处理文件中传递的变量来更改TXT文件的内容。

如下:

[00010001]
Name = 192.168.1.141
Port = 2046
[GER]
Port=1
Speed=19200
SAM=2

我需要更改前3行

批处理文件

@echo off
setlocal=enabledelayedexpansion
set "nfilial="
set /p "nfilial=Numero do Filial (4 Digitos):"
set "pdvnunber="
set "empresatef="
set /p "empresatef=Numero Empresa TEF (4 Digitos):"
set "iptef="
set /p "iptef=IP Servidor TEF:"
set "portatef="
set /p "portatef=Numero Porta TEF:"
rename scope.ini scope.tmp
for /f %%a in (scope.tmp) do (
  set foo=%%a
  if "!foo:[        ]=!" neq "!foo!" set "foo=[%empresatef%%nfilial%]"
  echo !foo! >> scope.ini) 
del scope.tmp

令人怀疑的是,不知道如何使用相同的IF来消耗剩余的参数,即使只有第一步参数文件已被全部损坏。

如下:

[00010001] 
Name 
Port 
[General] 
[GER] 
Port=1 
Speed=19200 
SAM=2

同样,交换参数没有条件,第二行和第三行也会改变。

谢谢

2 个答案:

答案 0 :(得分:0)

@echo off
setlocal
set "nfilial="
set /p "nfilial=Numero do Filial (4 Digitos):"
set "pdvnunber="
set "empresatef="
set /p "empresatef=Numero Empresa TEF (4 Digitos):"
set "iptef="
set /p "iptef=IP Servidor TEF:"
set "portatef="
set /p "portatef=Numero Porta TEF:"
>scope.ini.new (
  echo [%empresatef%%nfilial%]
  echo Name = %iptef%
  echo Port = %portatef%
  for /f "skip=3 delims=" %%A in (scope.ini) do echo %%A
)
move /y scope.ini.new scop.ini >nul

如果文件没有任何标签,且文件大于< 64K行,那么FOR语句可以替换为

more +3 scope.ini

它会更快。

答案 1 :(得分:0)

会限制下面命令的字符数吗?我想只接受数字字符,只接受2个字符。

set "nfilial="
set /p "nfilial=Numero do Filial (2 Digitos):"
for /f "delims=1234567890" %%a in ("%nfilial%") do goto :nfilial