CMD中的反向输出

问题描述 投票:-1回答:3

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

UPDATE

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

代码

@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
windows batch-file cmd command-line command-prompt
3个回答
1
投票

这将获取文本文件的(每行的)前四个单词,并以相反的顺序将其重写为result.txt

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

0
投票

这里有三种不同的方式。

  1. 替换魔法(从Aacini借来)
  2. 对于令牌
  3. 递归
@echo off
setlocal EnableDelayedExpansion

set "var=One two three four five"

call :rev1
call :rev2
call :rev3
exit /b


:rev1 -- replacement magic
setlocal
set "rev="
set rev=%var: = !rev!&Set rev=% !rev!

echo %0 !rev!
exit /b

:rev2 -- FOR toekns
setlocal
FOR /F "tokens=1-5" %%1 in ("%var%") do set "rev=%%5 %%4 %%3 %%2 %%1"
echo %0 !rev!
exit /b

:rev3 -- recursion
setlocal
set "rev="
call :__rev3_rec %var%
echo %0 !rev!
exit /b

:__rev3_rec
if "%1" == "" exit /b
call :__rev3_rec %2 %3 %4 %5
set "rev=%rev%%1 "
exit /b

0
投票

我不确定我是否已完全理解您的问题,因此,这是为了颠倒每行中每个空格分隔的子字符串的顺序。

对于该任务,我将使用PowerShell。


提示符下,(powershell.exe)
GC '.\x.txt'|%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'

((cmd.exe)

"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoP "GC '.\x.txt'|%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'

来自

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoP "GC '.\x.txt'|%%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'


如果您只处理文件的第一行,而不是所有文件,则需要进行一些小的修改。

提示符下,((powershell.exe)

GC '.\x.txt' -To 1|%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'

((cmd.exe)

"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoP "GC '.\x.txt' -To 1|%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'

来自

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoP "GC '.\x.txt' -To 1|%%{$L=$_.Split(' ');[Array]::Reverse($L);$L -Join ' '}|SC '.\results.txt'


请注意,在两种情况下,如果您的字符串实际上都用双引号引起来,则这些字符串将不会移动位置。这意味着"I have two kids"将输出为kids" two have "I,而不是"kids two have I"
© www.soinside.com 2019 - 2024. All rights reserved.