これは、「回避策」が必要なWindows / cmdシェルハックを見つけるたびに、より複雑に見える要件の1つです。基本的に...DOSシェルのFORループ内のフォルダの特定のリストを反復処理する必要があります。これが私が思いついたループです:
echo ^ [start for test]
for /F "usebackq " %%f IN (`dir /b /adh "w:\sandbox\tmp\"`) DO (
echo ^ do with file: %%f
rem <do something>
)
echo ^ [for test done]
主な必要性は、ソースフォルダー(ここではsandbox \ tmp)の隠しディレクトリを反復処理することです。
結果は驚くべきものであり、苛立たしいものです。これは、コンソールコマンドラインでこのFOR命令を使用した結果です。
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
File Not Found <1>
folder = C:\WINDOWS\system32\cmd.exe <2>
folder = any <4>
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
folder = morph <4>
folder = practice-northwind <4>
これは5つのフォルダをリストします。素晴らしい!そして、ラベルに1つのcmd.exe:< 2 >とラベルにミステリー:< 1 >。私が思う DIRスイッチについて説明する必要があります。
- / b .......ベアフォーマット、ファイル/フォルダ名のみ。
- / a dh .....隠しディレクトリとディレクトリの両方で、それを徹底的に試しました-動作しませんでした。
/ a hd - / a d ...... Directory属性を持つアイテム(フォルダー)。
- / a h ......隠しファイル/フォルダ(一見)。
私は出力にラベルを付けました、そしてこれが私がこれまでに解決したものです。
- 「ファイルが見つかりません」...... .. ......わかりません。「ファイルが見つかりません」と表示されます。< 1 >は、/ahスイッチのアーティファクトです。私が言うとき:
IN(dir /b /adh "w:\sandbox\tmp\"
) - C:\ WINDOWS \ system32 ** cmd.exe ** .. ..スプリアスイテレータ(%% f); このエラーは、FOR/Fコマンドバージョンでのみ表示されます。隠しディレクトリを見つけたいのですが、ファイルセットリストに隠しファイルが返されません(d'oh)。したがって、これまでのところ、 FOR/Fのusebackqバージョンで立ち往生しています。
- 隠しフォルダ... .. .. .. ......これらのフォルダは期待される出力です_。
- ディレクトリフォルダ。.. .. .. .. .. ..これらのファイルは偽の結果であり、望ましくありません。
CMD行バージョン(またはサンプルDOSスクリプト)からの意図された結果は、< 3 >項目だけです。
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
残念ながら、ターゲットフォルダ内の任意のファイルを取得することもできます。これもHIDDENスイッチ(/ ah)と関係があると思います。
設定したディレクトリにある非表示のフォルダ(ファイルではない)のみを一覧表示するにはどうすればよいですか。FORコマンドのようにリストを繰り返し処理しますか?
よろしくお願いします/