如何对丢弃到批处理文件的参数进行排序?

Gen*_*zer 0 batch-file command-prompt

我正在编写一个批处理文件,用于查找并执行所有update.bat放在其上的目录中的所有文件.

这里的问题是我希望参数(即目录的路径)按名称排序,但事实证明它们按修改日期排序.

这是Windows(Windows 7)的默认行为吗?有什么建议可以解决这个问题?


这是我的批处理脚本:

@echo off
Setlocal EnableDelayedExpansion

if [%1]==[] goto :no_update_dropped

set LOG_FILE=update_log.txt

echo You are about to run these updates:
for %%G IN (%*) do (
  if exist %%~sG\NUL echo %%G
)

pause

for %%G IN (%*) do (
  if exist %%G\NUL (
        if exist %%G\update.bat (
            call %%G\update.bat %LOG_FILE%
        ) else (
            echo No update.bat found in %%G.
            goto :no_batch_found
        )
    )
)
goto :success

:no_update_dropped
echo NO UPDATE FOLDER FOUND
echo Drag and drop one or more update folder to run.
goto :exit

:no_batch_found
echo UPDATE NOT COMPLETED!
goto exit

:success
echo all updated has been run successfully
goto :exit

:exit
pause
Run Code Online (Sandbox Code Playgroud)

最好的祝福.

pan*_*-34 5

您可以在for循环中对参数列表进行排序,如下所示:

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('(for %%i in (%*^) do @echo %%~i^)^|sort') do (
    set dirname=%%a
    set dirname=!dirname:~0,-1!
    echo use "!dirname!" without the trailing space
)
Run Code Online (Sandbox Code Playgroud)

PS似乎sort在字符串的末尾附加一个空格,(WTF ????)所以你必须摆脱它.我改变了代码.

最后dbenham的解释下,这变成了:

for /f "delims=" %%a in ('cmd /c "for %%i in (%*) do @echo %%~i"^|sort') do (
    echo use "%%a"
)
Run Code Online (Sandbox Code Playgroud)

PPS这应该在名称中使用逗号更安全(当然,必须引用它们)

for /f "delims=" %%a in ('cmd /c ^"for %%i in ^(%*^) do @echo %%~i^"^|sort') do (
        echo use "%%a"
)
Run Code Online (Sandbox Code Playgroud)