Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理编辑文本文件_Batch File_Search_Replace - Fatal编程技术网

Batch file 使用批处理编辑文本文件

Batch file 使用批处理编辑文本文件,batch-file,search,replace,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 消費 2

如果在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   覧下
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   ばな
textfile2.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   覧下
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
@echo关闭
setlocal enableDelayedExpansion
设置“B=”
“textfile1.txt.new”
移动/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
@echo关闭
setlocal EnableDelayedExpansion
rem读取textfile2并使用第一列创建一个数组
对于(textfile2.txt)中的/F%%a,请设置“file2[%%a]=1”
rem进程文本文件1
(对于(textfile1.txt)中的/F“tokens=1*”%%a(
如果已定义文件2[%a]设置/P“=#”textfile1.new
移动/Y textfile1.new textfile1.txt>NUL

无法批量“编辑”文件。您必须逐行读取两个输入文件,并逐行写入输出文件。谢谢,它可以工作!但是它在第二行读textfile2.txt,所以我必须先输入它,但它仍然有效谢谢:)