使用批处理合并文本文件中的行

时间:2018-07-24 22:13:30

标签: batch-file for-loop text echo

我想制作一个程序,将文本文件第二行的内容放在第一行。 (第二个是否未编辑都没关系)

for /f "tokens=1" %%t in (file.txt) do set string1=%%t
for /f "tokens=2" %%t in (file.txt) do set string2=%%t
echo %string1%%string2%>file.txt

我有两个问题似乎无法解决。

一个:循环只在变量中包括每行的第一个单词。

二:Echo不会用给定的变量替换文件的第一行,而是禁用了ECHO命令(我使用的是Windows 10的法语版本,只是翻译了文件中写的内容,英文是Windows版本可能会略有不同,但您会明白的。

如果您有任何建议,请解释一下您提供的代码的作用(我一直很乐意学习)

3 个答案:

答案 0 :(得分:1)

您的问题尚不清楚,可以通过几种不同的方式来理解。无论如何,无需使用for命令即可​​简化此管理:

@echo off
setlocal EnableDelayedExpansion

< file.txt (

   rem Takes the content of the first line
   set /P "line1="

   rem Takes the content of the second line and puts it on the first
   set /P "line2="
   echo !line1!!line2!

   rem It doesn't matter if the second line doesn't get edited
   echo !line2!

   rem Copy the rest of lines
   findstr "^"

) > output.txt

move /Y output.txt file.txt

答案 1 :(得分:0)

默认情况下,FOR命令使用空格作为分隔符。因此,您必须告诉它不要在DELIMS选项中使用任何定界符。另外,您应该能够使用一个FOR / F命令执行此操作。只需将前一行保留在变量中即可。

@ECHO OFF
setlocal enabledelayedexpansion

set "line1="
(for /f "delims=" %%G in (file.txt) do (
    IF NOT DEFINED line1 (
        set "line1=%%G"
    ) else (
        echo !line1!%%G
        set "line1="
    )
)
REM If there are an odd amount of lines, line1 will still be defined.
IF DEFINED line1 echo !line1!
)>File2.txt

编辑:我想我完全误解了您的问题。一旦您澄清了问题,如有需要,我将重新发布代码解决方案。

答案 2 :(得分:0)

使用skip忽略第一行,并将第二行写入两次。通常,对文件进行编辑意味着要重写为新文件,并且可能需要重命名以保留旧文件名。

:: Q:\Test\2018\07\25\SO_51508268.cmd
@Echo off
Set "flag="
( for /f "usebackq skip=1 delims=" %%A in ("file1.txt") Do (
    If not defined flag (
      Echo=%%A
      Set flag=true
    )
    Echo=%%A
  )
) >file2.txt
Del file1.txt
Ren file2.txt file1.txt

运行该批处理后,最初编号为1..5的file1.txt如下所示:

> type file1.txt
2
2
3
4
5