0

我正在编写一个批处理文件,该文件查找并执行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

最好的祝福。

4

2 回答 2

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
)

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

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

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

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

for /f "delims=" %%a in ('cmd /c ^"for %%i in ^(%*^) do @echo %%~i^"^|sort') do (
        echo use "%%a"
)
于 2012-06-08T06:07:05.680 回答
0

我会改变输入集。

您可以通过使用/on和获取目录按名称排序

/ad

所以所有目录的名称=

dir /ad /on 
于 2012-06-08T04:56:39.600 回答