1
1

More than 3 years have passed since last update.

D&D でフォルダ名を取得して、ファイルリストを元に指定フォルダに順番にファイルをコピーする

Last updated at Posted at 2020-02-16

English(Google Translate)

以下のテキストをコピーしてテキストファイルに張り付けて、

dir_copy.bat等の名前で保存して、ご使用ください


※下記参考の拡張機能をインストールした方は、
 コードの横のコピーボタンからクリップボードにコピーできます
 素敵な機能


主に個人PCの作業用に作ったbatなので、使い方は限定的です

改変、改造、ご自由に

もっとこうしたら良くなるのに!とかは多分にあるかと思いますが

20分程度で作った超絶個人向けのbatですので、あしからず


使い方としては、コピーしたいフォルダを作ったbatファイルにD&Dしてくださいませ


※ディレクトリはちゃんとコピーされるかな?
 単一ファイル一覧のみを想定していたので、
 ディレクトリコピーの動作は未検証です
 うまく動かなかったらゴメンなさい

dir_copy.bat

@echo off

::対象のファイルリストを設定
::とりあえずc直下想定、好きなところに作ってください
set file_list=c:\file_list.txt

::対象のコピー元ディレクトリを設定
::ココのf1にD&Dされたフルパスが取得できます
::完全フルパスでも""で括りましょう 何かの原因でそれが失敗してしまわないために
set dirfrom="%~f1"

::対象のコピー先ディレクトリを設定
::copy 時に""で括らないとコマンドとして認識しないので注意
::フォルダが無い場合は怒られるかも?
::あぁ、未検証、フォルダが無い場合はフォルダを作ったらいいだけですので、ご自由に
set dirto="C:\copy_hoge"

::対象のドライブに移動
cd /d %~d1\

::対象のカレントディレクトリに移動
cd %dirfrom%

::ファイル名一覧のみ指定のテキストファイルに書き込む
dir /a-d /b *.* > %file_list%

::移動したディレクトリのファイルから指定のディレクトリに file_listを元に ファイルを順番にコピー
for /f %%i in (%file_list%) do (
 xcopy %%i %dirto% /y
)

::不要になったファイルリスト削除
::file_list を削除したい方は :: のコメントアウトを外してください
::del %file_list%

::上層のstart bat から呼ばれる場合を考慮して
::自己終了しないので 自己終了を自ら呼びます
@exit 

::@pause

robocopy


::高みを目指したいプログラマー
::最新のwindowsでは既に標準搭載された、最新のコピーを使用したいなら
::こっちのrobocopyをオススメする
::フォルダ名の冗長性(256)回避など色々と便利だ
::しかもディレクトリはコピーしたくないという意思も感じられるオプション /xd *
::複雑極まる 堅牢な robocopy の オプションを知りたい方は
::後述の参考資料参照されたし
robocopy %dirfrom% %dirto% %%i /e /np /r:0 /w:0 /xd * /xa:sh /xjd /xjf /fft /xf desktop.ini Thumbs.db

応用編

D&Dとタイトルに書きましたが

対象のフォルダをコピーする際に

作ったbatに直接D&Dするのではなく

下記のようなstart.batを作成して、

「送る(Sendto)」から使ったほうが

便利だと後から気づきました

(最小化して欲しかった)

なのでstart.batは応用ということで

windows キー+R -> shell:sendto

sendto に dir_copy_start.bat のショートカットを置く

dir_copy_start.bat

@echo off

::start [/オプション] コマンド
::主なオプション
::/d ディレクトリ名 コマンドの作業ディレクトリを指定
::/min 実行するコマンドのウィンドウを最小化
::/high 優先度「高」で実行

:: %1 のファイルパスを渡す
start /min c:/dir_copy.bat %1

::@pause

「このプログラムやページ作りの参考になった資料」

Qiita Markdown 書き方 まとめ
このプログラムを作るのに役立ちました!ってコレはQiitaの書式


Markdown記法 チートシート
このプログラムを作るのに役立ちました!ってコレも書式参考


Catalpa Markdown 早見表
このプログラムを作るのに役立ちました!ってコレもまたまた書式参考


Qiitaのマークダウンで色をつける方法[140色]
これは文字色を変えたい場合の参考(ほとんど関係ない)


Qiita Markdown記法:コードブロックに対応する言語は...
コードブロックの Batchfile を見つけました。。。


Qiitaをより便利にするChrome拡張機能をつくりました
まさかのブラウザの拡張機能で
Qiitaを見やすく「行番号を」表示する方法があるとは

よく使う人は拡張機能をインストールして、コードを見やすくしましょう!
コピー機能ありがとう!


Google 翻訳 URL/ウェブページやドキュメントを翻訳する
コレは English(Google Translate) で利用しました。


Yandex Translate
コレは English(Yandex Translate) で利用しました。。。

※👆のGoogle 翻訳だとスタイルが崩れる問題があったので、
コチラを利用するようにしました。(場当たり的対応)

今度はPCだと見れて、スマホだと重くて見れないか。

とりあえず Yandex のご利用は控えるとするか。


コマンドプロンプトの使用方法 call
このプログラムを作るのに役立ちました!(本物)


robocopy - Microsoft Docs
このプログラムを作るのに役立ちました!
(本物、日本語ドキュメントとしては意味不明な所があるので注意)

つまるところrobocopyは
robocopy-j.docをダウンロードして見るのが
一番情報量多くていいのね

robocopy の仕様、
windows のファイルコピー仕様を、
完全に理解できたプログラマーはどれだけいるのだろうか?
と疑問を投げかけるコマンド

しかも、ディレクトリの指定の順番を間違えるだけで
データが削除されるなど数々の罠が多い?

そして windows のファイルコピー仕様の深みにハマると危険!
深淵ドコロでは済まないウルトラスーパーでハイなブラックホール級の
深~い闇が簡単に見れるよ!

ウッ!眩暈がしてきた。。。

そんな方にはコマンドライン上ではなくGUI RichCopy をオススメするよ!

sorry! robocopy が複雑すぎたね、HAHAHAHA
とマイクロソフト様が用意してくれたGUIがあるらしい

ナンジャそりゃ!?

私は使う必要性、「権限」やバックアップの「ミラーリング」を、
行いたいわけではなかったので使用感は未使用
Microsoft RichCopy のインストール

docs.microsoft.com ユーティリティ スポットライトRobocopy GUI


最後に

私に初めて windows のファイルコピーは
本当に」奥が深いと教えてくれた

日本の「天才」プログラマーの一人として
数えられているお方の発言を紹介して終わりとする

登 大遊氏- Windows のファイルのコピーは、驚くほど奥が深い。Facebook


See the Pen QiitaLGTMTestPreview by ゲームプログラマー⛅あの日見たバグの名前を僕達はまだ知らない。 (@game_programer) on CodePen.

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1