新しく質問する

バッチファイルの質問

役に立った:1件
  • 質問者:choumei
  • 投稿日時:2008/02/14 15:19
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

初心者ですが、バッチファイルで、二つのディレクトリ下のファイルをバイナリモードを比較したいですが、その二つのフォルダのしたにまたサブフォルダがあります。分かる先輩がいれば、教えてくれないか?

この質問に回答する
このQ&Aは役に立ちましたか?(役に立った:1件)

回答(5件)

  • 参考になった:0件
  • 回答者:Tacosan
  • 回答日時:2008/02/18 15:01

確か, 相対パスをとりだす「完全な方法」はなかったような気がします.
擬似的には for /F の delim=, tokens= オプションでできて, 例えば a:\some\a 以下と b:\other\b 以下を比較するなら
for /F "delim=\ tokens=3*" %F in ('dir /b a:\some\a\*.txt') do fc a:\some\a\%G b:\other\b\%G
という感じになるかと. for のヘルプを読んで理解してください.

通報する

この回答への補足

Tacosanさん、
返答ありがとうございました。

バッチで、相対パスを取り出す問題について、やはり難航ですね。

はい、いろいろ教われまして、ありがとうございました

  • 参考になった:0件
  • 回答者:ken-etsu
  • 回答日時:2008/02/17 11:19

前にも書いたんですが、diffコマンドで解決できます。
参考URLをからダウンロードできます。

通報する

この回答への補足

kerr-etsuさん、
返答ありがとうございます。

確かに、言われるように、diffコマンドで解決できますが、今の環境では、あまり他のソフトを入れない環境なので、バッチ処理機能を利用するしかない苦情があります。

  • 参考になった:0件
  • 回答者:Tacosan
  • 回答日時:2008/02/16 22:11

比較したい 2つのディレクトリは, それぞれどんな構成になっているんですか?
そのうち, どのファイルとどのファイルを比較したいんですか?
それがわからないので「失敗した」と言われたところでどうしようもありません.
せいぜい「for のヘルプを読め」くらい.

通報する

この回答への補足

Tacosanさん、
比較したいディレクトリは、こんな構成になっています。
AとBのディレクトリを比較したいんです。Aの下に、a.txtファイルと
testディレクトリがあって、testの下に、b.txtがあります。
Bディレクトリのしたにもa.txtファイルとtestディレクトリがあって、testの下に、b.txtがあります。
a\a.txtとb\a.txt,また、a\text\b.txtとb\text\b.txt は、比較したい
ものです。

for /F %%F in ('dir /s /b a\*.txt') do fc /B %%F "b\%%~pnxF"
を使えば、aの下のtxtのフルパスがb\の後ろに追加されます。
bのしたにそのようなファイルがないので、失敗します。

相対パスが追加される方法がありませんでしょうか?
また、教えていただけないでしょうか?
よろしくお願いします。

  • 参考になった:0件
  • 回答者:Tacosan
  • 回答日時:2008/02/15 20:51

「教えてくれないか」って, なんか偉そう....
ぱっと思い付くのは for + dir + fc かな. 例えば
for /F "delims= " %%F in ('dir /b a:\*.txt') do fc /b %%F "b:\%%~pnxF"
で a:\*.txt と b:\*.txt の比較ができるような気がします. サブフォルダの中まで比較したければ dir /s /b a:\*.txt にすれば「a ドライブにある全ての *.txt ファイル」が対象になります.
あ, バッチファイル用に %% にしてあります. 「試しにコマンドラインから実行してみる」というときには, %% ではなく % にして実行してください.

通報する

この回答への補足

Tacosan さん、
回答ありがとうございました。
Tacosanさんの案でやってみたら、やはり失敗しました。
%%~pnxFのところにa:\*.txtのフルパスが付けられて、失敗の原因になりました。
それを回避する方法がありませんでしょうか?
いろいろありがとうございました!
また、よろしくお願いします。

  • 参考になった:0件
  • 回答者:ken-etsu
  • 回答日時:2008/02/15 11:15

OSはWindowsですか?

「バイナリモードを比較」の意味が解りません。テキストファイルかバイナリファイルかを比較するんでしょうか?それとも、テキストファイルではなく、バイナリファイルとして比較する、という意味でしょうか?
比較の結果は、「同一」「異なる」の二つでいいのでしょうか?それとも、同一でない場合は、差分を出力する必要があるでしょうか?

サブフォルダの下のファイルも再帰的に比較する必要があるのでしょうか?

UNIX系のdiffコマンドで解決できそうな気がします。参考URLからWindows版が手に入ります。

通報する

この回答への補足

失礼しました。補足ですが、diffで実現できますが、バッチファイル
で実装したいときに、どうすれば、いいですか。

実は、「バイナリモードを比較」じゃなくて、バイナリモードで比較するということをいいたかったです。

例えば、Aのフォルダの下に、a.txtとb.txt,および、Sqlフォルダがあります。Sqlフォルダの下にc.txtとDB2フォルダもあります。同様に、
Bというフォルダがあって、その下には、Aと同じファイル名のファイルとフォルダがあります。比較するときに、A:\\a.txt と B:\\a.txt は、比較したいです。また,A:\\b.txt と B:\\b.txtは、比較したいです。

OSはWindowsです。

また、よろしくお願いします

この回答へのお礼

ken-etusu さん、
早速の返答ありがとうございます。
失礼しましたが、私の書き間違いでした。

実は、「バイナリモードを比較」じゃなくて、バイナリモードで比較するということをいいたかったです。

例えば、Aのフォルダの下に、a.txtとb.txt,および、Sqlフォルダがあります。Sqlフォルダの下にc.txtとDB2フォルダもあります。同様に、
Bというフォルダがあって、その下には、Aと同じファイル名のファイルとフォルダがあります。比較するときに、A:\\a.txt と B:\\a.txt は、比較したいです。また,A:\\b.txt と B:\\b.txtは、比較したいです。

OSはWindowsです。

また、よろしくお願いします。

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ