使用批处理文件搜索和编辑文件

时间:2011-09-14 21:39:22

标签: batch-file command-line-arguments replace ini

我希望能够使用批处理文件编辑txt文件。许多事情使这有点复杂。

首先,文件名是frog.properties并在记事本中打开很好但在计算机上会运行; .properties的文件类型与记事本无关。如果文件需要它可以进行关联,但我想避免这种情况。

其次,需要编辑的文本是文件中的单行。我们要编辑的行中的前9个字符对于该行是唯一的,并且在编辑后将保持不变。但是,该行位于文件中,并且该行之后的行将因机器而异。如果需要删除并添加到文件中,可以在文件中移动该行没问题。

到目前为止,我发现下面列出的代码找到了here并稍微进行了编辑。现在,当我运行批处理文件(名为replace.cmd或replace.bat)时,它只是回显“此文件不存在”并退出提示。我已经验证该文件位于该位置。

将来我希望能够回收此代码,只需更改文件位置和文本即可轻松使用它来编辑任何.ini或txt文件,以便查找和编辑。可以运行的文件类型需要为.bat或.cmd,因为我将使用此环境。

谢谢。

@echo off
setlocal enabledelayedexpansion

if not exist "%1" (echo this file does not exist...)&goto :Failed


for /f "tokens=* delims=" %%a in (%1) do (

   set write=%%a
   if "%%a"=="%2" set write=%3

   echo !write! 
   (echo !write!)>>%~n1.replaced%~x1
)

replace "C:\Users\ME\Desktop\test.txt" "withquot=*" "withquot=it worked"

pause
:Failed
pause

更新 09/20/2011

此时文件将回显“此文件不存在”并暂停。所以我删除了行if not exist "%1" (echo this file does not exist...)&goto :Failed

我得到了

invalid Switch - "withquot=it worked"
我尝试从无效开关中删除“=”并得到相同的invalid switch我尝试使用set来设置各个变量并更改了文件中的引用。我已经尝试将测试文件移动到C的根目录并更改引用。

测试文件目前看起来像这样

test file
withquot=didntwork
USING_LOCAL_SHARED_MEM=1

我似乎没有做任何事情会使这个文件起作用,我必须遗漏一些小的东西,或者我正在使用这个文件完全错误的方向。我在Vista和Windows 7上测试了该文件。您看到的文件有问题吗?

最重要的是,我不在乎如何,但我希望能够使用批处理文件编辑.txt文件,并且能够进行行替换。

2 个答案:

答案 0 :(得分:0)

我仍然真的想知道如何在批处理文件中执行此操作,但我找到了使用here的vbs脚本的方法。使用.cmd文件或.bat文件我一直遇到在查找中更换=的问题或替换弄乱所有内容。

我将文件从该位置更改为Arguments 2到X上的循环,以便文件的格式为Find(0)在位置(2)和(3)和(4)中替换为(1)...

Option Explicit

Const ForReading = 1
Const ForWriting = 2
Dim Puppet, strOld, strNew, i
Puppet = 0
strOld = WScript.Arguments.item(0)
strNew = WScript.Arguments.item(1)
i = 1

On Error Resume Next
Do While i <= WScript.Arguments.count
    i = i + 1
    Call update(WScript.Arguments.item(i), strOld, strNew)
    Puppet = Puppet Or (Err.Number = 0): Err.Clear
Loop
On Error GoTo 0

Sub update(strFile, strOld, strNew)
Dim objFSO, objFile, strText, strNewText
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOld, strNew)
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine strNewText
objFile.Close
End Sub

答案 1 :(得分:0)

这很容易。曾经听说过将&gt; NUL添加到

的末尾
pause

?好吧,&gt; NUL创建一个名为NUL的文件。只需输入

即可
echo (text) >C:\Users\%userprofile%\Desktop\myfile.txt

这也适用于创建批处理文件。 “()”不需要。 要添加更多行,只需输入如下:在这种情况下需要“()”。

(echo First line.
echo Second line.
echo Third line.) >C:\Users\%userprofile%\Desktop\myfile.txt

它的样子:

First Line.
Second Line.
Third Line.

现在批处理文件:

(echo @echo off
echo echo Second line.
echo pause) >C:\Users\%userprofile%\Desktop\myfile.bat

这将使编辑时看起来像这样:

@echo off
echo Second Line.
pause

并将像这样运行:

Second Line.
Press any key to continue...

设置变量时,请记住,如果输入

set /p "%password%=?"

进入新文件,它将取消%%并使其成为“密码”。 要解决这个问题,请输入:

set /p "%%password%%=?"

它会正确显示。如果您在构建新批处理文件之外设置变量,请说

set /p "%password%=?"

然后输入

if not %password%==? goto whatever

在新的批处理文件中,它会将密码设置在一个文件中,然后在下一个文件中它仍然等于它,因为它在创建新文件之前设置了它。 如果这还不够清楚,请与我联系,并向您发送一些我过去使用过的应用程序示例。