在批处理脚本中将每个第二行与前一行合并

时间:2017-11-06 08:31:20

标签: windows batch-file cmd scripting

我使用了以下代码,但在我的情况下,设置内容是空白的。请帮忙。感谢。

  set content=

    for /f "delims=" %%i in (fileA.txt) do set content=%%i

    for /f "delims=" %%i in (FileA.txt) do set content=%content% %%i

    ECHO %content%> result.txt


   FileA.txt
      test
      A
      Testing
      B


   Expected Output:
       test A
       Testing B

3 个答案:

答案 0 :(得分:0)

你的两个for独立工作(第二个工作在第一个完成时开始) 你的第一个循环获取文件的最后一行,然后第二个循环将文本文件的每一行添加到变量(可变长度有一个限制,你很快就会用这种方法到达它。)
最后的空变量是由于缺少使用delayed expansion

使用单个for和交替标志代替:

@echo off 
setlocal enabledelayedexpansion
set flag=0
(for /f "delims=" %%i in (FileA.txt) do (
  if !flag!==0 (
    <nul set /p ".=%%i "
  ) else (
    echo %%i
  )
  set /a "flag=(flag+1) %% 2" 
))>result.txt

注意:由于批处理/ cmd限制,这可能会有一些问题(行长,特殊字符

答案 1 :(得分:0)

我们需要'@echo off'语句,不要在每次执行程序时打印代码而只有echo语句,'rem'就是提到行是注释。 'SETLOCAL EnableExtensions EnableDelayedExpansion'需要启用!用于解决变量的语句。

@echo off

rem this for loop reads the file FileA.txt line by line by specifying delims= (nothing) 
rem then checks the condition if the line is even line or not, if odd then adding it to myVar variable
rem if even then printing both earlier odd with the current even line to the result.txt file.
set myVar=
set nummod2=0
set /a i=0
rem creating an empty file on everytime the program runs
copy /y nul result.txt
SETLOCAL EnableExtensions  EnableDelayedExpansion

for /f "delims=" %%a in (FileA.txt) do (
set /a i=i+1
set /a nummod2=i%%2
if !nummod2!==0 (
echo !myVar! %%a
) else (
set myVar=%%a
)

) >> result.txt;

echo 'Done with program execution. Result saved to result.txt in the same folder of this batchfile'
rem pause

答案 2 :(得分:0)

您需要一个for命令来处理所有行和这个简单的逻辑:如果它是第一行读取,则存储它; else显示存储的第一行,第二行 AND 删除第一行,因此所有行对都使用相同的逻辑:

@echo off
setlocal EnableDelayedExpansion

set "firstLine="
(for /F "delims=" %%a in (FileA.txt) do (
   if not defined firstLine (
      set "firstLine=%%a"
   ) else (
      echo !firstLine! %%a
      set "firstLine="
   )
)) > result.txt