2012-05-09 4 views

答えて

41
FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /od') DO SET a=%%i 
echo Most recent subfolder: %a% 

(窓10用%i

  • /bが裸形式のため
  • /ad-hディレクトリだけではなく、隠されたもの
  • t:c使用することを意味ソートの作成日(0を使用最後の書き込みの日付の)
  • /odソート古い順
  • for /Fは最後のものが最新のもので、コマンドを実行し、ディレクトリ名に設定します。

コマンドラインで(バッチファイルではなく)直接実行する場合は、%%ではなく%を使用してください。

これはカレントディレクトリで動作します - @iesouはあなたが他のディレクトリ・パスを使用する必要がある場合dir後にディレクトリ・パスを追加する必要があります指摘したように。指定したディレクトリパスと

例:

FOR /F "delims=" %%i IN ('dir "c:\Program Files" /b /ad-h /t:c /od') DO SET a=%%i 

すべてのサブフォルダを介さないようにするには、(/o-d)を最新の最初のを持っているソート順を変更し、最初の後のforループから出ることができます呼び出し:

@echo off 
FOR /F "delims=" %%i IN ('dir /b /ad-h /t:c /o-d') DO (
    SET a=%%i 
    GOTO :found 
) 
echo No subfolder found 
goto :eof 
:found 
echo Most recent subfolder: %a% 
+3

+1 'dir'の後で'/b'の前に明示するには、ルートディレクトリを入力する必要があります。また、エコーがバッチの一部である場合は必要ありません。あなたが最後に設定した値が最新のディレクトリであるため、 '%a%'変数を使うことができます。 – iesou

+0

@iesou正しいのですが、ディレクトリを指定しないと、現在のディレクトリが使用されます。それを答えに加え、若干修正したバージョンを提供しました。 – marapet

+0

@ marapet上記のスクリプトを使用しましたが、フォルダにスペースがある場合は動作しません。 – Arthor

3

いくつかの改善をディレクトリ名にスペースで

FOR /F " tokens=*" %%i IN ('dir /b /ad-h /od') DO (SET a=%%i) 

今あなたが得る=アプリケーションデータの代わりに=アプリケーション
ノートの「トークン」の前のスペースに注意して

+0

いくつかの一致を無視する別の改善点: "%% i" == ".." "%% i" == "。セット – Thomas

関連する問題