使用批处理编辑文本文件

时间:2015-03-23 10:21:10

标签: batch-file search replace

如果在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   覧下

只有行开头的数字很重要

我搜索了几个代码,但它将编辑后的数字放在文件底部而不是编辑文件

提前感谢:)

2 个答案:

答案 0 :(得分: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

以上是用于合并两个已排序文本文件的技术的变体。

答案 1 :(得分:0)

此方法不要求文件具有任何排序顺序。只要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