web-dev-qa-db-ja.com

サブディレクトリ内のファイルを一覧表示し、Windowsコマンドラインでのみ相対パスを取得する

Windowsのコマンドラインを使用して、パス付きのファイルを一覧表示したいと思います。

例えば:

~\folder1
  \1.jpg
  \2.jpg
~\folder2
  \01.jpg
  \02.jpg

ただし、出力をフルパスではなく相対パスに類似させたいと思います。

.\folder1\1.jpg
.\foler1\2.jpg

DIR /S /B *.jpg > list.txtのようなフルパスをリストするC:\download\folder\folder1\1.jpgを使用する場合、.\folder1\1.jpg ..のような相対パスをリストするためだけに必要です。

find ./ -iname *.jpg > list.txtのLinuxコマンドラインを使用すると、期待どおりの結果が得られますが、Windowsでこのように機能するソリューションが必要です。

6
erinmon

Windowsコマンドラインを使用してサブディレクトリを持つファイルを一覧表示する

出力したい:。\ folder1\1.jpg、。\ foler1\2.jpg..。

C:\ download\folder\folder1\1.jpgのようなdir/s/b * .jpg> list.txtを使用するかどうかはわかっていますが、それは必要ありません。必要なのは。\ folder1 \だけです。 1.jpg

変数の明確化(以下)

  • 以下のロジックがFOR %X IN ("folder1","Folder2")またはSET Folders=("Folder1","Folder2","Folder3","Folder4")の場合、"Folder1""Folder2"などを、各フォルダーに二重引用符とコンマを付けて配置します。探したい名前と、エコー出力を追加するファイルに./Foldername/file.jpgをリストします。
  • コマンドラインコピーの例の場合、CD /D C:\Pathのサブフォルダーがある親ディレクトリに対して.JPGを実行する必要があります。ファイルは、子サブフォルダーとそれに含まれるファイルタイプ/拡張子を見つけるために親ディレクトリにいると仮定すると、そのロジックが暗黙的に存在するため存在します。
  • 他の例では、.JPGファイルがSET ParentDir=値に存在するすべての子サブフォルダーを含む親ディレクトリにプラグインするだけで、すべてが期待どおりに機能するはずです。
  • SETである他の変数は、それらが意味するものにかなり近い名前が付けられているので、自明であるはずですが、それ以外の場合はさらに明確にする必要がある場合はお知らせください。

コマンドラインコピーの例

FOR %X IN ("folder1","Folder2") DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\*.jpg"') DO ECHO .\%~X\%~F>>C:\Path\Log.txt

変数の設定コマンドラインコピーの例

(以下を使用して、DIRコマンドのフォルダー名とファイル拡張子を設定します。また、その形式でテキストに追加するサブフォルダーがある親ディレクトリのフルパスをプラグインします。ファイルがあります。)

SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %X IN %Folders% DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\%FileType%"') DO ECHO .\%~X\%~F>>"%LogFile%"

変数を設定したバッチスクリプトの例

@ECHO ON
SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %%X IN %Folders% DO FOR /F "TOKENS=*" %%F IN (

    'DIR /B /A-D ".\%%~X\%FileType%"'

) DO ECHO .\%%~X\%%~F>>"%LogFile%"
GOTO EOF

さらに読むとリソース

2
Pimp Juice IT

また、相対パスのみを一覧表示する関数も探していました。

ここにいくつかの代替ソリューションがあります...

(%cd%を開始パスに置き換えてください(例:C:\ download\folder))

特定の開始パスへの相対パスを持つすべてのサブディレクトリとファイルを一覧表示します:

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    ECHO !SubDirsAndFiles! 
)

選択したファイルタイプを特定の開始パスへの相対パスのみで一覧表示します(例:*。jpg、*。png):

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!\*.jpg" "!StartPath!\*.png"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    ECHO !SubDirsAndFiles! 
)

特定の開始パスへの相対パスを持つすべてのサブディレクトリとファイルを一覧表示します(パスは\で終わります):

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    IF EXIST "!StartPath!\!SubDirsAndFiles!\" (
        REM Echo This is a folder...
        ECHO !SubDirsAndFiles!\
    ) ELSE (
        REM Echo This is a file...
        ECHO !SubDirsAndFiles!
    )
)
1
Max