我需要创建一个批处理文件,它将在屏幕上显示多达 9 个参数,但以相反的顺序显示它们。批处理文件名为reverse11.bat
eg: C:\>REVERSE11.bat a b c d e <enter>
e d c b a REVERSE
我试着这样做,它有点乱,没有用。:(
SORT/R < %O > ANSWER
ECHO ANSWER
它出什么问题了?
我需要创建一个批处理文件,它将在屏幕上显示多达 9 个参数,但以相反的顺序显示它们。批处理文件名为reverse11.bat
eg: C:\>REVERSE11.bat a b c d e <enter>
e d c b a REVERSE
我试着这样做,它有点乱,没有用。:(
SORT/R < %O > ANSWER
ECHO ANSWER
它出什么问题了?
SORT
排序行,而不是单词,因此您需要将每个参数放在自己的行上。
setlocal enabledelayedexpansion
echo %1> unsorted.txt
echo %2>> unsorted.txt
echo %3>> unsorted.txt
:: etc...
sort /r unsorted.txt > sorted.txt
此时你可以显示 sorted.txt 如果你对它们都在不同的行没问题:
type sorted.txt
但是,如果您想将它们全部放回一行,则必须像这样处理文件:
for /f %%a in (sorted.txt) do (
set out=!out! %%a
)
echo %out%
您必须注意该sort
命令适用于 LINES,而不是 WORDS!下面的批处理文件首先将参数分成单独的行并将它们存储在一个临时文件中;第二部分调用sort /R
文件并将其输出行收集在一个字符串中:
@echo off
setlocal EnableDelayedExpansion
(for %%a in (%*) do echo %%a) > temp.txt
set output=
for /F "delims=" %%a in ('sort /R ^< temp.txt') do set output=!output! %%a
echo %output:~1%
del temp.txt
@ECHO OFF
SETLOCAL
SET reversed=%0
:loop
SET newparam=%1
IF NOT defined newparam ECHO %reversed%&GOTO :eof
SET reversed=%1 %reversed%
shift
GOTO loop
我们首先将变量设置reversed
为程序名称的值。
设置newparam
为 FIRST 参数的值 (%1) 如果该参数存在,将其添加到累积字符串的 FRONT,然后SHIFT
将参数移动到低一个位置(%2 变为 %1,%3 变为 %2,等等.) 并循环返回直到...
该%1
参数不存在(因为它们都已被SHIFT
淘汰)所以回显累积的字符串reversed
并完成例程。