从最后一行开始重写txt文件的批处理文件

时间:2017-10-19 23:30:05

标签: batch-file cmd

假设我有这行的test.txt

1
2
3

我需要批处理文件将此文件重写为

3
2
1

在新的txt文件中

我试过这个来复制最后一行

for /f "delims=" %%A in (ttt.txt) do set last=%%A
echo %last%>>ttt_lastline.txt

这将删除最后一行

@echo off & setlocal EnableDelayedExpansion
set row=
for /F "delims=" %%j in (File.txt) do (
  if  defined row echo.!row!>> File.new
  set row=%%j
)

但没有帮助

3 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "destdir=U:\destdir"
SET "filename1=100lines.txt"
SET "outfile=%destdir%\outfile.txt"
SET /a count=0
FOR /f "delims=" %%a IN (%filename1%) DO (
 SET /a count+=1
 SET "line[!count!]=%%a"
)
(
FOR /L %%a IN (%count%,-1,1) DO ECHO(!line[%%a]!
)>"%outfile%"

GOTO :EOF

您需要更改destdir的设置以适合您的具体情况。

我使用了一个名为100lines.txt的文件,其中包含一些虚拟数据供我测试。

生成定义为%outfile%

的文件

使用delayedexpansion,使用line[?]将每一行读入!count!,然后以相反顺序加载每行echo

答案 1 :(得分:1)

这是一个Vbscript解决方案。

创建一个名为reverse.vbs的文件,并将其用作代码。

Dim Stack: Set Stack = CreateObject("System.Collections.Stack")

Do While Not WScript.StdIn.AtEndofStream
    Stack.Push WScript.StdIn.ReadLine
Loop

WScript.StdOut.WriteLine Join(Stack.ToArray, vbCrLf)

现在要撤消您的文件,请从cmd提示符或批处理文件中执行此操作。

type input.txt |cscript //nologo Reverse.vbs>>output.txt

答案 2 :(得分:-1)

@echo off
setlocal enabledelayedexpansion
为(forward.txt)中的/ f %% a做     (
设置反转= %% a!反转!
    )
(!reversed!)中的%% i做echo。%% i >> reversed.txt
转到:eof