2017-02-15 4 views
0

"FullBuild"という名前のプロジェクトパスから最新のフォルダを取得する方法を知っていますか?バッチスクリプトで既存のフォルダを取得

私/ PROJパスでは、5つのフォルダがある 'ビルド' または以下のように 'FullBuild' フォルダから構成されています

  1. 2017-02-01_10-00 | -Build_110053
  2. 2017-02- 02_10-00 | -FullBuild_120043
  3. 2017-02-03_10-00 | -Build_105043
  4. 2017-02-04_10-00 | -FullBuild_120043
  5. 2017-02-05_10-00 | -Build_105043

私の試みコマンド

for /f "delims=" %%F in ('dir /a:d /b /o:d "%PROJ%\*\FullBuild_*"') do set "lastFullBuild=%%F" 
echo Last Full Build is: %lastFullBuild% 

ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。 最後のフル構築は、あなたがあなたの状況に合わせてsourcedirの設定を変更する必要があります2017-02-05_10-00

答えて

1
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir\project" 
SET "fullbuild=None found" 
FOR /f "delims=" %%a IN (
'dir /b /ad /o-n "%sourcedir%\*" 2^>nul' 
) DO (
FOR /f "delims=" %%f IN (
    'dir /b /ad "%sourcedir%\%%a\Fullbuild_*" 2^>nul' 
) DO SET "fullbuild=%%a"&GOTO found 
) 
) 

:found 
ECHO Last full build : %fullbuild% 

GOTO :EOF 

です。

fullbuildディレクトリの親ディレクトリ名は、YYYYMMDDhhmmと書式設定されています。これらのディレクトリを逆名順(/ o-n)で読むと、逆順に処理されます。

各ディレクトリ名は%%aで、その下にfullbuildディレクトリがあるかどうかを確認してください。存在する場合は、親の名前を割り当て、その名前でループを強制的に終了させて​​ください。fullbuildfullbuildディレクトリがまったく見つからない場合、None foundの値はループでも存続します。

dirコマンド内で2^>nulを使用すると、エラーメッセージが表示されないようにすることができます。 2>nulはエラー報告を抑制し、キャレットはcmdforではなくdirのリダイレクタであることを伝えるようにリダイレクタをエスケープします。

関連する問題