批处理文件打开txt替换文本保存并关闭

时间:2017-09-23 09:28:35

标签: powershell batch-file text replace

据我所知,这个社区是为了帮助别人,我不是百分之百地要求某人做委托工作或w / e但是我想要一系列批量文件来将某些数字更改为每批文件的特定数量。

echo off
if exist %application.yml del %application.yml
for /F "delims=" %%l in (%1) do (
    set "line=%%l"
    set "line=%line:specific text=another word%"
    echo/%line%>> %application.yml)'

如何设置此项以将数字数组替换为设定数字,对不起,我对此完全是个白痴。

文件本身application.yml

product: 
# Cntrl alt 1 Mini, 2 m16, 3 scar, 4 m4169, 5 akm, 6 ump,7 sks
discordUsername: 
discordPassword: 
maxCPUsUsage: 4
shutdownKey: 0x7B
reloadConfigKey: 0x79

screenResolutionX: 1920
screenResolutionY: 1080

playerEsp: true
playerEspColor: 0xFF00FF
playerEspPointSize: 1

radarEsp: true
radarEspColor: 0x0000FF
radarEspPointSize: 2

vehicleEsp: true
vehicleEspColor: 0xff0000
vehicleEspPointSize: 1
vehicleEspHotkey: 0x2D

lootEsp: true
lootEspColor: 0x00FF00
lootAirdropEspColor: 0xffffff
lootEspPointSize: 1
lootEspHotkey: 0x24

redrawTime: 0
reloadDataTime: 2000

aimEnabled: true
aimKey: 0x39
aimFOV: 95
aimFrequency: 6
aimPrecision: 1
aimSpeed: 1
bulletSpeed: 990
aimHitbox: 0

# Key list: https://msdn.microsoft.com/en-us/en-en/library/windows/desktop/dd375731(v=vs.85).aspx

基本上我希望替换的数字是子弹速度,它可能是之前更改的多个数字,例如

990
870
400

如果是这些实例中的任何一个,我希望用

替换它
900

依此类推。

因此,它搜索任何可能的数字并将其更改为指定的数字,并以相同的文件名保存文件。

如果我在示例中完全诚实,我会提前感谢任何帮助,我甚至不知道要改变什么,只需将一个数字替换为另一个数字,从不介意多个实例搜索:)

再次提出任何建议或帮助。

2 个答案:

答案 0 :(得分:2)

以下注释 .bat脚本应该可以完成这项工作,尽管空行不会复制到输出文件中:

@ECHO OFF
SETLOCAL EnableExtensions
rem redirect all output to a brand new file
>application.yml (
  rem parse a file (supplied file name %1 must not be equal to "application.yml")   
  for /F "usebackq delims=" %%l in ("%~1") do (
      rem parse each line
      for /F "tokens=1* delims=:" %%L in ("%%~l") do (
          if /I "%%~L"=="bulletSpeed" (
              rem modified line
              echo(%%L: 900
          ) else (
              rem original line 
              echo(%%l
          )
      )
  )
)

BTW,在原始脚本中,您需要Delayed Expansion来正确引用在带括号的代码块中定义的变量(re)(如FOR循环体),例如如下:

echo off
SETLOCAL EnableExtensions EnableDelayedExpansion
if exist application.yml del application.yml
for /F "delims=" %%l in (%1) do (
    set "line=%%l"
    set "line=!line:specific text=another word!"
    echo/!line!>>application.yml
)

资源(必读):

答案 1 :(得分:0)

正则表达式是进行此类编辑的理想选择 除了findstr的有限功能之外,批次缺乏RE支持。

这个包裹的powershell one liner将在cmd行或批处理文件中完成工作。

powershell -NoP -C "(gc application.yml) -Replace '(?<=bulletSpeed: )\d+','900'|sc application.yml"

它使用lookbehind assertionbulletSpeed:后的任何数字替换为900.

要将替换限制为之前的990,870,400之一,请使用:

powershell -NoP -C "(gc application.yml) -Replace '(?<=bulletSpeed: )(990|870|400)','900'|sc application.yml"