首页 > 解决方案 > 在 CMD 中反向输出

问题描述

我有一个短语需要在 results.txt 中输出。该短语来自x.txt。例如:“我有两个孩子”,它应该在 results.txt 中输出“孩子两个有我”。

更新

它已经在工作,但我不想循环。请看下面的代码

代码

@ECHO OFF
set /p content=<x.txt
SET var=!content: =,!
SET rev=
:LOOP
IF NOT "!var!"=="" (
    FOR /F "delims=, tokens=1,*" %%F IN ("!var!") DO (
        SET rev=%%F,!rev!
        SET var=%%G
    )
) ELSE (
    SET rev=!rev:~0,-1!
    GOTO ENDLOOP
)
GOTO LOOP
:ENDLOOP
ECHO !rev:,= ! > results.txt

标签: windowsbatch-filecmdcommand-linecommand-prompt

解决方案


这需要文本文件的前四个单词(每行)并以相反的顺序将它们重写为result.txt

>result.txt (for /f "tokens=1-4" %%a in (x.txt) do echo %%d %%c %%b %%a)

另一种解决方案(对于单行文本文件,未指定字数):

@ECHO OFF
setlocal enabledelayedexpansion
echo I have two little but wonderful kids>x.txt
<x.txt set /p x=
for %%a in (%x%) do set "res=%%a !res!"
>result.txt echo %res:~0,-1%

(虽然从技术上讲,该for命令本身就是一个循环)

如果没有任何形式的循环,如果您可以在前面保留一些空格:

@ECHO OFF
setlocal 
echo I have two kids>x.txt
<x.txt set /p x=
call :reverse %x%
goto :eof
:reverse
set "rev=%9 %8 %7 %6 %5 %4 %3 %2 %1"
echo Reverse without any form of loop: "%rev%"
for /f "tokens=*" %%a in ("%rev%") do echo To get rid of the spaces, you need a FOR loop: "%%a"

这限制为最多九个单词,因为cmd仅支持%1%9
可以通过使用shift命令使用更多参数(单词),但这意味着使用循环。


推荐阅读