- 締切済み
コピーコマンドについて(2)
「バッチファイルの内容」 Copy /y *.ibr "C:\Program Files\FFC\IB4" 上記の内容でバッチ処理を行うと、デスクトップ上にある*.ibr ファイルは、C:\Program Files\FFC\IB4フォルダ内にコピーされます。 しかし、C:\Documents and Settings\user1\My Documents\受信したファイルの中に移した、*.ibr に対しては、C:\Program Files\FFC\IB4フォルダ内にコピーされません。 デスクトップ上でも、My Documents\受信したファイルの中でも、同じCドライブ配下なので、コピーされると思っていたのですが、違いがわかりません。 なぜこうなるのでしょうか?どうしたら、どの場所からでも、コピーされるのでしょうか?教えてください。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
#5です。 前のやり方だと、C:\Documents and Settingsのようにスペースが入っているとうまく動かないことに気付きました。また、わざわざusebackqを使ったりcd C:\したりする必要がないことも分かったので、修正版です。 for /f "delims=" %%x in ('dir /s /b C:\*.ibr') do copy "%%x" "C:\Program Files\FFC\IB4"
- salsberry
- ベストアンサー率69% (495/711)
gawkもcygwinのfindも使わない、標準コマンドだけによる実現方法です。 cd C:\ for /f usebackq %%x in (`dir /s /b *.sym`) do copy %%x "C:\Program Files\FFC\IB4" 同名ファイルがあった場合に上書きされてしまう問題などは残ります。 Cドライブ全体からコピー元のファイルを探そうとすると、dir /s /b *.symの部分で時間がかかってしまうかもしれません。
- kakuritsu
- ベストアンサー率23% (62/261)
Cygwin をインストールして find コマンドを -exec オプションつきで実行すれば 一発で全部コピーできるかも知れません。 #3さんの同一ファイル名の問題は残りますけどね。 Linux コマンドなので、もし使ったことなければ敷居高いかな…。
それをやろうとすると、次の三つの処理の組み合わせが必要になるので、他の回答者さんの指摘どおり、1コマンドでは厳しいと思います。 ・コピーしたいファイルの所在カタログを作る ・カタログを元にコピーを実行する ・最後にカタログを削除する もしCOPYコマンドで、カレントディレクトリ以外にあるファイルを勝手に探してコピーされると、同じファイルが複数あった場合、自分が欲しいファイルではない方がコピーされたりして、困ったことになるでしょう。/yで上書きしている場合はなおさらです。 標準コマンドだけではどうにもならないので、gawkを使った次のようなバッチで処理するのはいかがでしょう。ただし注意としては、gawkを用意してもらう必要がある(参考URL)のと、テストしていないためデバッグはご自身でやってくださいね。 [コピー用バッチファイル] dir /b /s \*.ibs > \ibslist.txt gawk -f ibscopy.awk \ibslist.txt del \ibslist.txt [awkスクリプトの中身]メモ帳にコピー、ibscopy.awkとして保存しgawk.exeおよびバッチファイルと同じディレクトリに置く #↓↓↓ここから↓↓↓ BEGIN{todir="C:\\Documents and Settings\\All Users\\デスクトップ"} $0~/\.IBS/{ cmd="COPY /Y " $0 " " todir system(cmd) } #↑↑↑ここまで↑↑↑ これだと、C:全体が対照となります。対照を限定したければ、バッチファイルの先頭の行「dir /b /s \*.ibs…」のところに、ディレクトリを追加してください。例えば、「dir /b /s "\document and settings\*.ibs "…」のようにです。当然、ディレクトリ名にスペースが含まれる場合は、ダブルクォートで囲む必要があります。 また、コピー先はibscopy.awkの先頭の変数「todir」に指定されていますが、ここを変更する場合、\マークは必ず2個書いてください。上記の例でもそのようになっています。
- asapinya
- ベストアンサー率36% (40/109)
バッチファイルは現在デスクトップ上にありますよね。 コピーコマンドは、 COPY [オプション] 送り側の場所+ファイル名 受け側の場所+ファイル名 このうち場所が省略された場合、バッチファイルと同じ場所を指すことになります。 したがって、マイドキュメント内のファイルをコピーしたければ、 COPY /y "C:\Documents and Settings\user1\My Documents\*.ibr" "C:\Program Files\FFC\IB4" と書かなくてはいけません。
- salsberry
- ベストアンサー率69% (495/711)
*.ibrで表されるのは、「カレントディレクトリにある、拡張子がibrのファイル全て」だけです。 どこのディレクトリにある.ibrファイルでも指定先にコピーしようとすると、1コマンドだけで単純に行うことはできないと思われます。
お礼
ありがとうございました。