2016-11-02 6 views
0

for/dのリストでいくつかのフォルダを実行し、そのフォルダの中で最も古いファイルをエコーし​​ます。最終的に、これはファイルを別のフォルダに移動するために使用されます。私が持っている問題は、コマンド全体を終了させずに/ fをエスケープすることができないということです。/fのfor/dのバッチファイルにネストする

@echo off 
setlocal enableextensions disabledelayedexpansion 

set basefolder=M:\somefolder\* 
for /D %%D in (%basefolder%) do (

FOR /F %%I IN ('DIR %%D\* /B /O:-D') DO echo "%%I" & goto moved 
:moved 
) 

これは私を得る ")予想外だった"

@echo off 
setlocal enableextensions disabledelayedexpansion 

set basefolder=M:\somefolder\* 
for /D %%D in (%basefolder%) do (

FOR /F %%I IN ('DIR %%D\* /B /O:-D') DO echo "%%I" & exit /b 
) 

これ、当然のことながら、処理された最初のフォルダでコマンドを終了します。

誰かが実際にうまくいくかもしれないことを示唆することはできますか? cmdif definedための変数の現在の値を使用することを利用して

+0

はいそれはバッチファイルと大きな問題だが:出口はすべてのループだけでなく、内側のものを終了します。そして 'goto'は同じことをします –

+2

[バッチファイル入れ子のFor/Lループとそれらを終了する]の可能な複製(http://stackoverflow.com/questions/32214744/batch-file-nested-for-l-loops-and- exiting-them) –

答えて

2
for /D %%D in (%basefolder%) do (
set "show=Y"  
FOR /F %%I IN ('DIR %%D\* /B /O:-D') DO if defined show (
    echo "%%I" 
    set "show=" 
) 
) 

。ラベルは、コードブロック内で使用することはできません

注意(コマンドの括弧のシリーズ)

+0

これは私が探しているものです。ありがとうございました。 – GaryD

+0

これは、きちんとしたコードロジックです。私はそれが大好きです。 – Squashman

関連する問題