我正在编写一个批处理文件,用于查找并执行放在其上的所有目录中的所有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
最诚挚的问候。
答案 0 :(得分: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
)
P.S。似乎sort
在字符串末尾附加了一个空格,(WTF ????)所以你必须摆脱它。我改变了代码。
最后在dbenham's explanation的帮助下,这变为:
for /f "delims=" %%a in ('cmd /c "for %%i in (%*) do @echo %%~i"^|sort') do (
echo use "%%a"
)
P.P.S这应该用名字中的逗号更安全(当然,必须引用它们)
for /f "delims=" %%a in ('cmd /c ^"for %%i in ^(%*^) do @echo %%~i^"^|sort') do (
echo use "%%a"
)
答案 1 :(得分:0)
我会改变输入集。
您可以使用/on
按名称订购并获取目录
/ad
所有目录按名称=
dir /ad /on