for
ループを使用してディレクトリ内の各ファイルを反復するにはどうすればよいですか?
また、特定のエントリがディレクトリなのか、単なるファイルなのかをどのように見分けることができますか?
for
ループを使用してディレクトリ内の各ファイルを反復するにはどうすればよいですか?
また、特定のエントリがディレクトリなのか、単なるファイルなのかをどのように見分けることができますか?
これにより、現在のディレクトリ内のすべてのファイル(およびファイルのみ)が一覧表示されます。
for /r %i in (*) do echo %i
また、そのコマンドをバッチファイルで実行する場合は、%記号を2倍にする必要があります。
for /r %%i in (*) do echo %%i
(@agnulに感謝)
反復処理...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
残念ながら、ファイルとサブディレクトリを同時に反復処理する方法は見つかりませんでした。
cygwinとその bash を使用するだけで、より多くの機能を利用できます。
これとは別に: MS Windows のビルトイン ヘルプは、cmd のコマンド ライン構文を説明するための優れたリソースであることに気付きましたか?
こちらもご覧ください: http://technet.microsoft.com/en-us/library/bb490890.aspx
FOR
コマンド ラインからの実行とバッチ ファイルからの実行には微妙な違いがあります。%
バッチ ファイルでは、各変数参照の前に2 文字を配置する必要があります。
コマンドラインから:
FOR %i IN (*) DO ECHO %i
バッチ ファイルから:
FOR %%i IN (*) DO ECHO %%i
このforループは、ディレクトリ内のすべてのファイルを一覧表示します。
pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd
「delims=」は、スペースを含む長いファイル名を表示するのに便利です。
'/ b "は名前のみを表示し、サイズの日付などは表示しません。
dirの/a引数について知っておくべきことがいくつかあります。
コマンドラインでこれを使用する場合は、「%」を削除してください。
お役に立てれば。
%1は渡された最初の引数を参照し、イテレータでは使用できません。
これを試して:
@echo off
for %%i in (*.*) do echo %%i
for %1 in (*.*) do echo %1
完全なガイドについては、cmdで「HELPFOR」を試してください
これはXPコマンドのガイドです。http://www.ss64.com/nt/
次のコードは、現在のディレクトリに「AllFilesInCurrentDirectorylist.txt」という名前のファイルを作成します。このファイルには、現在のディレクトリにあるすべてのファイル (ファイルのみ) のリストが含まれています。見てみな
dir /b /a-d > AllFilesInCurrentDirectorylist.txt
forfilesコマンドを使用することもできます。
forfiles /s
また、それがディレクトリであるかどうかを確認します
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
名前がファイルであるかディレクトリであるかをバッチで判断できないため、vbscript(Windows Scripting Host)を使用します。
vbsでは、次のようになります。
Dim fileSystemObject
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
Dim mainFolder
Set mainFolder = fileSystemObject.GetFolder(myFolder)
Dim files
Set files = mainFolder.Files
For Each file in files
...
Next
Dim subFolders
Set subFolders = mainFolder.SubFolders
For Each folder in subFolders
...
Next
MSDNのFileSystemObjectを確認してください。
ファイル名を取得するには、/L オプションを指定して xcopy コマンドを使用します。したがって、ディレクトリまたはサブディレクトリ内のすべてのファイルを取得する場合は、次のようにすることができます。
for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a
Windowsシステムには常に存在し、コピーされていないため、宛先としてc:\を使用するだけなので問題ありません。サブディレクトリも必要な場合は、最後に /s オプションを使用してください。他の理由で必要な場合は、xcopy の他のスイッチを使用することもできます。
ファイルがディレクトリかどうかをテストするには、次のようにします。
FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory
これは、ファイルがディレクトリではないかどうかのみを示します。これは、ファイルが存在しない場合にも当てはまるため、必要に応じて最初に確認してください。キャレット (^) はリダイレクト記号をエスケープするために使用され、ファイル リストの出力は NUL にリダイレクトされて表示されないようにします。一方、DIR リストのエラー出力は出力にリダイレクトされるため、DIR のメッセージ「ファイルが見つかりません」に対してテストできます。 "。