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
)

PSsort文字列の最後にスペースを追加するようです(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 に答える