【发布时间】:2011-11-17 09:48:39
【问题描述】:
我希望能够使用批处理文件编辑 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
更新 2011 年 9 月 20 日
现在该文件将回显“此文件不存在”并暂停。所以我删除了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 文件,并且能够进行行替换。
【问题讨论】:
-
这看起来应该像你需要的那样工作 - 究竟是什么不工作?它接受任何位置的任何文件名、要查找的任何文本以及命令行上的任何替换文本(如您的示例使用所示)。
-
我看到您的待编辑。您以其他用户身份登录(“Maskedplant”而不是“MaskedPlant”),因此它不接受它作为原始海报。再试一次,以用户 ID 为“945884”的“MaskedPlant”身份登录。 :)
-
我认为未解决的部分是他希望能够编辑该行,而不是完全替换它。例如,更改 ini 文件变量的值,通过变量名引用它。此代码完全替换了该行。话虽如此,通过传递正确的参数,这段代码就可以完成这项工作。也许您想要实现的具体示例可以帮助我们了解您还需要什么。
-
对不起,我最初以未注册用户的身份发布了此内容。我不在乎编辑行与替换它。现在该文件根本不起作用。我希望它在位于 1 的文件中搜索 2 中列出的文本,并将 2 所在的行替换为列出的文本 3。现在当我运行文件时,它只是回显“此文件不存在”并关闭。就像它要么找不到文件,要么不明白 %1 是什么。有没有不同的顺序我应该把它全部放进去?我应该以某种方式先替换行并调用其余的吗?
标签: batch-file command-line-arguments replace ini