2017-09-23 271 views
0

我明白,这个社区是为了帮助人们,我不是百分之百如何要求某人做一个委托工作或W/E,但我想一系列批处理文件,用于将每个批处理文件中的特定数字更改为特定数字批处理文件打开TXT替换文本保存并关闭

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 

所以基本上我想要替换的数量是子弹的速度,它可能是从以前的变化ECT多个号码,例如

990 
870 
400 

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

900 

等等等等。

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

在此先感谢您的帮助,如果我是在我不知道什么改变来使示例完全诚实它只是更换一个号码给其他别提多实例搜索:)

再次任何建议或帮助。

+0

本网站ISN”请求调试程序员的正确位置,但是如果您要发布输入文件样本'%1',并且它的布局精确并显示了它的大小,那么您可能很幸运能够得到可以节省的响应你必须委托某人。顺便说一句,不要将代码和文件信息发布到评论部分,使用[edit](https://stackoverflow.com/posts/46378073/edit)工具将其添加到原始文章中。 – Compo

+0

我已经编辑了您的文章,希望能够正确地格式化新添加的.yml文件,如果它现在是错误的,请让我知道!你只想在该文件的任何位置替换与“990”匹配的确切值,或者只打算替换仅属于“bulletSpeed”或其他内容的匹配值。 – Compo

+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 
     ) 
    ) 
) 
) 

顺便说一句,在原始脚本,你需要Delayed Expansion做出正确的引用到在括号内的代码块内定义的变量(重新定义)(如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 
) 

资源(必读):

+0

非常感谢我的帮助,我真的很感激 –

0

正则表达式是理想的做这样的编辑。
除findstr有限的功能外,批次缺少RE支持。

这个包装的powershell一个班轮将在cmd行或批处理文件中完成这项工作。

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

它采用lookbehind assertion与900

更换任何数量的以下bulletSpeed:要更换限制在以前的990,870,400使用该之一:

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