仅在包含特定文本的行上批量查找和替换
Batch find and replace only on lines that contain a specific text
我正在尝试从批处理中“查找并替换”文本文件,但仅限于特定行,例如:
之前:
7,U7k956ykBJ,"GenericLine"
7,SwNZVX7SwPA2,"GenericLine"
7,783bMsWVSJZ8,"LineToReplace"
7,PiUcP84ujF5z,"GenericLine"
之后:
7,U7k956ykBJ,"GenericLine"
7,SwNZVX7SwPA2,"GenericLine"
2,783bMsWVSJZ8,"LineToReplace"
7,PiUcP84ujF5z,"GenericLine"
所以,为了更清楚,如果该行包含“LineToReplace”
,我想将“7”替换为“2”
在我看来,在 PowerShell 中执行此操作有点笨拙。
但是,对于批处理,这个脚本:
- 启用延迟变量扩展。
- 将 DestinationFile.txt 设置为 0 字节。
- 通过
FOR
循环遍历名为 SourceFile.TXT. 的文件的行
- 将每一行放在变量 Var 中。
- 用两个单引号替换 Var 中的任何双引号(以避免 IF 语句出现问题。)。
- 将 Var 中的搜索文本替换为空,将结果保存到 Alt。
- 如果 Alt 不等于 Var,则 Var 具有所需的文本,在 Var 中获取该行的全新未更改副本,回显数字 2,然后是除第一个字符之外的所有 Var。
- Else Var 没有所需的文本,因此按原样回显该行。
- 将输出发送到 DestinationFile.txt
@ECHO OFF
SetLocal EnableExtensions EnableDelayedExpansion
NUL >DestinationFile.txt 2>NUL
FOR /F "EOL=~ TOKENS=* DELIMS=~" %%L IN (SourceFile.txt) DO (
SET Var=%%L
SET Var=!Var:"=''!
SET Alt=!Var:LineToReplace=!
IF NOT "!ALT!" == "!Var!" (
SET Var=%%L
ECHO;2!Var:~1!
) ELSE (
ECHO;%%L
)
) >>DestinationFile.txt
我正在尝试从批处理中“查找并替换”文本文件,但仅限于特定行,例如:
之前:
7,U7k956ykBJ,"GenericLine"
7,SwNZVX7SwPA2,"GenericLine"
7,783bMsWVSJZ8,"LineToReplace"
7,PiUcP84ujF5z,"GenericLine"
之后:
7,U7k956ykBJ,"GenericLine"
7,SwNZVX7SwPA2,"GenericLine"
2,783bMsWVSJZ8,"LineToReplace"
7,PiUcP84ujF5z,"GenericLine"
所以,为了更清楚,如果该行包含“LineToReplace”
,我想将“7”替换为“2”在我看来,在 PowerShell 中执行此操作有点笨拙。
但是,对于批处理,这个脚本:
- 启用延迟变量扩展。
- 将 DestinationFile.txt 设置为 0 字节。
- 通过
FOR
循环遍历名为 SourceFile.TXT. 的文件的行
- 将每一行放在变量 Var 中。
- 用两个单引号替换 Var 中的任何双引号(以避免 IF 语句出现问题。)。
- 将 Var 中的搜索文本替换为空,将结果保存到 Alt。
- 如果 Alt 不等于 Var,则 Var 具有所需的文本,在 Var 中获取该行的全新未更改副本,回显数字 2,然后是除第一个字符之外的所有 Var。
- Else Var 没有所需的文本,因此按原样回显该行。
- 将输出发送到 DestinationFile.txt
@ECHO OFF
SetLocal EnableExtensions EnableDelayedExpansion
NUL >DestinationFile.txt 2>NUL
FOR /F "EOL=~ TOKENS=* DELIMS=~" %%L IN (SourceFile.txt) DO (
SET Var=%%L
SET Var=!Var:"=''!
SET Alt=!Var:LineToReplace=!
IF NOT "!ALT!" == "!Var!" (
SET Var=%%L
ECHO;2!Var:~1!
) ELSE (
ECHO;%%L
)
) >>DestinationFile.txt