Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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_For Loop - Fatal编程技术网

Batch file 按行号进行批处理文件行交换

Batch file 按行号进行批处理文件行交换,batch-file,for-loop,Batch File,For Loop,我编写了一个批处理程序,它从.txt文件交换一行代码。 我有两个.txt文件: 第一条,test1.txt包含如下所示的记录: 1:hello 2:how 3:are 4:you 3:good 第二个.txt文件(test2.txt)包含一行行号,如下所示: 1:hello 2:how 3:are 4:you 3:good 我想用text2.txt中的第三行替换test1.txt中的第三行。 我尝试了以下批处理,但只收到错误消息: setlocal EnableDelayedExpans

我编写了一个批处理程序,它从
.txt
文件交换一行代码。 我有两个
.txt
文件:

第一条,
test1.txt
包含如下所示的记录:

1:hello
2:how
3:are
4:you
3:good
第二个.txt文件(
test2.txt
)包含一行行号,如下所示:

1:hello
2:how
3:are
4:you
3:good
我想用text2.txt中的第三行替换test1.txt中的第三行。 我尝试了以下批处理,但只收到错误消息:

setlocal EnableDelayedExpansion
对于/F“tokens=1 delims=:”%(test2.txt)do中的%%a(
设置液化天然气=%%a
)   
对于/F“tokens=1 delims=“%(test2.txt)do中的%%a(
设置lnh=%%a
)   
设置linenumberxchange=%lng%
设置lineNew=%lnh%
如果存在beispiel.tmp del beispiel.tmp
设置lineNr=0
对于/f“delims=”%(test1.txt)中的%%A(
设置/a行编号+=1>NUL
如果!lineNr!=%linenumberxchange%(
echo%lineNew%>>beispel.tmp
) 
其他(
echo%%A>>beispel.tmp
)
)

有什么想法吗?

我建议使用以下代码来完成此任务:

@echo关闭
setlocal EnableDelayedExpansion
设置“行数=3”
对于/F“tokens=2 delims=:”%%A IN('type“test2.txt”^ | findstr/c:%line_number%”)do(
设置“替换=%%A”
)
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置“行=%%B”
如果不是“!行:%line\u number%=!”==“!行!”(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)
首先,循环查找替换字,然后用另一个循环替换

另一种方法是,您可能希望找到两个文件的第三行,或者假设
test2.txt
只有一行,如您的问题中所述

假设存在上述情况,则以下代码有效:

@echo关闭
setlocal EnableDelayedExpansion
设置“行计数器=0”
设置“行数=3”
对于/F“tokens=2 delims=:”%(test2.txt)中的%%A(
设置“替换=%%A”
)
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置/a“行计数器+=1”
设置“行=%%B”
如果!行计数器!相等%line\u编号%(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)
如果实际的
test1.txt
文件不包含
n:
替换
(echo%line\u number%:%replace%)>>“test1.txt”
所有情况下都包含
(echo%replace%)>>“test1.txt”

如果
test2.txt
文件也发生同样的情况,请将
for/F“tokens=2 delims=:”(test2.txt)do中的%%A(
替换为
for/F“delims=”(test2.txt)do中的%%A(
IN所有情况下的%/strong>)

假设
replace
变量中存储的值位于第三行,则使用:

@echo关闭
setlocal EnableDelayedExpansion
设置“行计数器=0”
设置“行数=3”
对于/F“tokens=2 delims=:”%(test2.txt)中的%%A(
设置/a“行计数器+=1”
if!线路计数器!EQU 3(
设置“替换=%%A”
)
)
设置“行计数器=0”
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置/a“行计数器+=1”
设置“行=%%B”
如果!行计数器!相等%line\u编号%(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)

我建议使用以下代码执行此任务:

@echo关闭
setlocal EnableDelayedExpansion
设置“行数=3”
对于/F“tokens=2 delims=:”%%A IN('type“test2.txt”^ | findstr/c:%line_number%”)do(
设置“替换=%%A”
)
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置“行=%%B”
如果不是“!行:%line\u number%=!”==“!行!”(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)
首先,循环查找替换字,然后用另一个循环替换

另一种方法是,您可能希望找到两个文件的第三行,或者假设
test2.txt
只有一行,如您的问题中所述

假设存在上述情况,则以下代码有效:

@echo关闭
setlocal EnableDelayedExpansion
设置“行计数器=0”
设置“行数=3”
对于/F“tokens=2 delims=:”%(test2.txt)中的%%A(
设置“替换=%%A”
)
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置/a“行计数器+=1”
设置“行=%%B”
如果!行计数器!相等%line\u编号%(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)
如果实际的
test1.txt
文件不包含
n:
替换
(echo%line\u number%:%replace%)>>“test1.txt”
所有情况下都包含
(echo%replace%)>>“test1.txt”

如果
test2.txt
文件也发生同样的情况,请将
for/F“tokens=2 delims=:”(test2.txt)do中的%%A(
替换为
for/F“delims=”(test2.txt)do中的%%A(
IN所有情况下的%/strong>)

假设
replace
变量中存储的值位于第三行,则使用:

@echo关闭
setlocal EnableDelayedExpansion
设置“行计数器=0”
设置“行数=3”
对于/F“tokens=2 delims=:”%(test2.txt)中的%%A(
设置/a“行计数器+=1”
if!线路计数器!EQU 3(
设置“替换=%%A”
)
)
设置“行计数器=0”
对于/F“delims=“%%B IN('type“test1.txt”^&del“test1.txt”)do(
设置/a“行计数器+=1”
设置“行=%%B”
如果!行计数器!相等%line\u编号%(
(回显%line_number%:%replace%)>>“test1.txt”
)否则(
(echo!line!)>>“test1.txt”
)
)

IIUR文件
test2.txt
包含要替换的行号和用冒号分隔的替换文本

在迭代文件
text1.txt

这样,您可以有多个替换项(以及更长的文本)

鉴于这些
> Q:\Test\2019\02\07\SO_54576635.cmd
1:hello
2:how
3:good are
4:you
5:at coding batches
@echo off
selocal EnableDelayedExpansion

rem Load original lines from test1.txt
for /F "tokens=1* delims=:" %%a in (test1.txt) do (
   set "line[%%a]=%%b"
   set "last=%%a"
)

rem Replace same-numbered lines from test2.txt
for /F "tokens=1* delims=:" %%a in (test2.txt) do set "line[%%a]=%%b"

rem Output final lines
(for /L %%i in (1,1,%last%) do echo %%i:!line[%%i]!) > test1.txt