我希望能够使用批处理文件编辑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文件,并且能够进行行替换。
答案 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
在新的批处理文件中,它会将密码设置在一个文件中,然后在下一个文件中它仍然等于它,因为它在创建新文件之前设置了它。 如果这还不够清楚,请与我联系,并向您发送一些我过去使用过的应用程序示例。