搜索文本文件并在使用批处理文件找到特定字符串时附加它
Search text file and append it when specific string is found using batch file
我有一个文本文件,我正试图通过批处理脚本对其进行编辑。
具体来说,该文件包含一个参数列表,我试图在其中一个参数(字符串)之后添加一个路径(字符串)。
为此,我编写了下面的脚本,该脚本应该
- 遍历文件的每一行
- 如果该行包含我要查找的参数,则将参数和路径连接成一个新行。
- 将所有内容(未更改和更改的行)输出到新的 txt 文件。
在我的例子中,我在文件中查找的参数是“图像”。
不幸的是,虽然这里的主要问题可能是我很笨,但我一直无法弄清楚为什么它不起作用,非常感谢您的帮助。
代码如下:
@setlocal enableextensions enabledelayedexpansion
@echo off
push %~dp0
set "path=%UserProfile%"
REM iterate through each line of given txt file
for /F "delims="%%G in (settings.txt) do (
set line =%%G
if not x%line:image=%==x%line% set "newline=%line%%path%
echo !newline! >> newFile.txt
)
popd
pause
exit /b 0
为了参考,我自己根据this page写了我的代码。
提前致谢
由于您提供的代码存在几个问题,下面是我预期的示例:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "fileIn=%~dp0settings.txt"
Set "strGet=image"
Set "strAdd=%UserProfile%"
Set "fileOut=%~dp0newFile.txt"
(
For /F Delims^=^ EOL^= %%G In (
'""%__AppDir__%find.exe" /V /N "" 0< "%fileIn%" 2> NUL"'
) Do (
Set "strLine=%%G"
SetLocal EnableDelayedExpansion
If /I Not "!strLine:%strGet%=!" == "!strLine!" (
Echo=!strLine:*]=!%strAdd%
) Else Echo=!strLine:*]=!
EndLocal
)
) 1> "%fileOut%"
我不打算解释它是如何工作的,为了找出答案,您应该尝试一个命令一个命令地完成它,利用它们各自的帮助输出。您唯一需要修改的是分别位于 4
..7
行的四个变量定义。 请注意,变量扩展和子字符串替换不适用于您想放在 %strGet%
中的任何内容,它有局限性!
我有一个文本文件,我正试图通过批处理脚本对其进行编辑。 具体来说,该文件包含一个参数列表,我试图在其中一个参数(字符串)之后添加一个路径(字符串)。
为此,我编写了下面的脚本,该脚本应该
- 遍历文件的每一行
- 如果该行包含我要查找的参数,则将参数和路径连接成一个新行。
- 将所有内容(未更改和更改的行)输出到新的 txt 文件。
在我的例子中,我在文件中查找的参数是“图像”。
不幸的是,虽然这里的主要问题可能是我很笨,但我一直无法弄清楚为什么它不起作用,非常感谢您的帮助。
代码如下:
@setlocal enableextensions enabledelayedexpansion
@echo off
push %~dp0
set "path=%UserProfile%"
REM iterate through each line of given txt file
for /F "delims="%%G in (settings.txt) do (
set line =%%G
if not x%line:image=%==x%line% set "newline=%line%%path%
echo !newline! >> newFile.txt
)
popd
pause
exit /b 0
为了参考,我自己根据this page写了我的代码。
提前致谢
由于您提供的代码存在几个问题,下面是我预期的示例:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "fileIn=%~dp0settings.txt"
Set "strGet=image"
Set "strAdd=%UserProfile%"
Set "fileOut=%~dp0newFile.txt"
(
For /F Delims^=^ EOL^= %%G In (
'""%__AppDir__%find.exe" /V /N "" 0< "%fileIn%" 2> NUL"'
) Do (
Set "strLine=%%G"
SetLocal EnableDelayedExpansion
If /I Not "!strLine:%strGet%=!" == "!strLine!" (
Echo=!strLine:*]=!%strAdd%
) Else Echo=!strLine:*]=!
EndLocal
)
) 1> "%fileOut%"
我不打算解释它是如何工作的,为了找出答案,您应该尝试一个命令一个命令地完成它,利用它们各自的帮助输出。您唯一需要修改的是分别位于 4
..7
行的四个变量定义。 请注意,变量扩展和子字符串替换不适用于您想放在 %strGet%
中的任何内容,它有局限性!