2016-04-11 11 views
1

このコードは、以下のバッチファイル(Windows)にあります。各.jpgファイルのパスのリストをディレクトリに返します。その後、そのリストをImageMagick Convert関数(Windows変換ではない)に渡してpdfを作成します。FORループで使用すると、FORFILESは再帰的になりません。

echo moving CMD to drive location at %~dp1 
CD /d %~dp1 

echo getting the list of file names 
FORFILES /p %~dp1 /s /m "*.jpg" /C "cmd /c echo @path" > files.txt 

echo creating the pdf using ImageMagick 
convert @files.txt test.pdf 

これがjpg画像データや他の単一のファイルタイプを返すために正常に動作します。複数の画像ファイルタイプを検索する必要があり、FORFILESFORループに入れることができるthisサンプルソリューションがあります。

for %%G in (.jpg , .tif) do FORFILES /p %~dp1 /s /m "*.jpg" /C "cmd /c echo @path" > files.txt 

しかし、私が行うと、プログラムはもはや再帰的ではありません。 forfiles/sは機能しなくなりました。

私はFOR /Rを試しましたが、フォルダ名にはできるだけスペースが必要です。

これを再帰的に保持する方法や、スペースを含むフォルダ名に問題はありませんか?

+0

'for/r'はファイル名全体を表示しますので、変数を引用符で囲むか' for/F 'を使用してくださいusebackqトークン= * "%a in('%a ') –

答えて

0

@LưuVĩnhPhúc

お返事ありがとうございます。あなたが言ったことを試しましたが、For/Fは.jpgがファイルだと思ってエラーを投げていて、見つけられませんでした。

あなたは私に新しいことを試してもらいました。そうすることで、それは問題だった私の構文だと思います。

FOR %%G in (.jpg, .tif) do FORFILES /p %~dp1 /s /m *%%G /C "cmd /c echo @path" >> files.txt 

ここで、/ rまたは/ fを削除し、変数forをforループからforfilesループに追加しました。

これは再帰的性質を保持し、forループにリストされているファイルタイプのみを返します。

+1

実際には動作しません私のために。 FORFILES/Mオプションは、パスが\で終わっていて、 '%〜dp1'が常に\で終わっていれば動作しません。 '/ m%〜dp1.'を使用した場合のみ動作します。 – dbenham

関連する問題