使用批处理编辑文本文件
Edit a text file using batch
如果在 textfile2.txt
中找到,我想编辑 textfile1.txt 中的一个词
textfile1.txt 包含
264392 ja_JP 9000 -0.2620 0 2 0 どれ
264393 ja_JP 9000 0.5577 0 2 0 最低
264394 ja_JP 9000 0.4761 0 2 0 明け
264395 ja_JP 9000 -0.1549 0 2 0 消費
264396 ja_JP 9000 -0.2028 0 2 0 ばな
264399 ja_JP 9000 -0.1141 0 2 0 覧下
textfile2.txt 包含
264394 ja_JP 9000 0.4761 0 2 0 明け
264395 ja_JP 9000 -0.1549 0 2 0 消費
264396 ja_JP 9000 -0.2028 0 2 0 ばな
textfile1.txt 现在应该是
264392 ja_JP 9000 -0.2620 0 2 0 どれ
264393 ja_JP 9000 0.5577 0 2 0 最低
#264394 ja_JP 9000 0.4761 0 2 0 明け
#264395 ja_JP 9000 -0.1549 0 2 0 消費
#264396 ja_JP 9000 -0.2028 0 2 0 ばな
264399 ja_JP 9000 -0.1141 0 2 0 覧下
只有行首的数字很重要
我搜索了一些代码,但它把编辑后的数字放在文件底部,而不是编辑文件
提前致谢:)
我假设这两个文件都已经按照您的示例进行了排序,没有文件包含 !
字符,并且第二列始终存在。
假设 FOR /F 正确处理日文字符(我根本不知道),那么以下应该有效:
@echo off
setlocal enableDelayedExpansion
set "B="
<"textfile2.txt" (
for /f "usebackq delims=" %%A in ("textfile1.txt") do (
if not defined B (
set /p "B="
for /f %%B in ("!B! x") do set "B=%%B"
)
for /f "tokens=1*" %%C in ("%%A") do if !B! equ %%C (
echo #%%C %%D
set "B="
) else (
echo %%A
)
)
) >"textfile1.txt.new"
move /y "textfile1.txt.new" "textfile1.txt" >nul
以上是用于合并两个已排序文本文件的技术的变体。
此方法不要求文件有任何排序顺序。只要 FOR /F
命令正确处理日文字符,它就应该工作。
@echo off
setlocal EnableDelayedExpansion
rem Read textfile2 and create an array with the first column
for /F %%a in (textfile2.txt) do set "file2[%%a]=1"
rem Process textfile1
(for /F "tokens=1*" %%a in (textfile1.txt) do (
if defined file2[%%a] set /P "=#" < NUL
echo %%a %%b
)) > textfile1.new
move /Y textfile1.new textfile1.txt > NUL
如果在 textfile2.txt
中找到,我想编辑 textfile1.txt 中的一个词textfile1.txt 包含
264392 ja_JP 9000 -0.2620 0 2 0 どれ
264393 ja_JP 9000 0.5577 0 2 0 最低
264394 ja_JP 9000 0.4761 0 2 0 明け
264395 ja_JP 9000 -0.1549 0 2 0 消費
264396 ja_JP 9000 -0.2028 0 2 0 ばな
264399 ja_JP 9000 -0.1141 0 2 0 覧下
textfile2.txt 包含
264394 ja_JP 9000 0.4761 0 2 0 明け
264395 ja_JP 9000 -0.1549 0 2 0 消費
264396 ja_JP 9000 -0.2028 0 2 0 ばな
textfile1.txt 现在应该是
264392 ja_JP 9000 -0.2620 0 2 0 どれ
264393 ja_JP 9000 0.5577 0 2 0 最低
#264394 ja_JP 9000 0.4761 0 2 0 明け
#264395 ja_JP 9000 -0.1549 0 2 0 消費
#264396 ja_JP 9000 -0.2028 0 2 0 ばな
264399 ja_JP 9000 -0.1141 0 2 0 覧下
只有行首的数字很重要
我搜索了一些代码,但它把编辑后的数字放在文件底部,而不是编辑文件
提前致谢:)
我假设这两个文件都已经按照您的示例进行了排序,没有文件包含 !
字符,并且第二列始终存在。
假设 FOR /F 正确处理日文字符(我根本不知道),那么以下应该有效:
@echo off
setlocal enableDelayedExpansion
set "B="
<"textfile2.txt" (
for /f "usebackq delims=" %%A in ("textfile1.txt") do (
if not defined B (
set /p "B="
for /f %%B in ("!B! x") do set "B=%%B"
)
for /f "tokens=1*" %%C in ("%%A") do if !B! equ %%C (
echo #%%C %%D
set "B="
) else (
echo %%A
)
)
) >"textfile1.txt.new"
move /y "textfile1.txt.new" "textfile1.txt" >nul
以上是用于合并两个已排序文本文件的技术的变体。
此方法不要求文件有任何排序顺序。只要 FOR /F
命令正确处理日文字符,它就应该工作。
@echo off
setlocal EnableDelayedExpansion
rem Read textfile2 and create an array with the first column
for /F %%a in (textfile2.txt) do set "file2[%%a]=1"
rem Process textfile1
(for /F "tokens=1*" %%a in (textfile1.txt) do (
if defined file2[%%a] set /P "=#" < NUL
echo %%a %%b
)) > textfile1.new
move /Y textfile1.new textfile1.txt > NUL