質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

6899閲覧

Windows コマンドラインで、ファイルコピーを行うときに進捗ダイアログを出したい

standard-soft

総合スコア196

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2020/08/12 12:07

編集2020/08/12 13:37

自分の知っている範囲では、どのように実現するかわからないので質問します。

WSHのJscriptや、node.js でCUIでファイルコピーをすることがあります。
RoboCopyというファイルコピーコマンドも呼び出したりします。
これらのコードではファイルやフォルダコピーできますが
進捗が表示されないのでやや不便かと思っていて、進捗ダイアログを表示するようにしてみたいです。

Windowsのファイルエクスプローラではファイルコピーすると大きなファイルの場合は進捗ダイアログがでます。

https://www.billionwallet.com/windows10/file-transfer-dialog-box.html
この記事の一番下に表示されているようなダイアログです。

これを、コマンドライン上のコマンドでファイルコピーする時も表示させたいです。

PowerShellの何らかのプログラムを作成したり、
あるいはRobocopyのなにかのオプションを指定したり、
あるいは、C#でexeを作って、それをコマンドラインで呼び出す、などする必要があるかもしれませんが、
どの方法をとればいいのかわかりません。

できたら簡単に実現したいです。

https://www.it-swarm.dev/ja/powershell/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC%E4%B8%AD%E3%81%AE%E9%80%B2%E8%A1%8C%E7%8A%B6%E6%B3%81%EF%BC%88copyitem%E3%81%A8writeprogress%EF%BC%9F%EF%BC%89/968067289/
https://stackoverflow.com/questions/13883404/custom-robocopy-progress-bar-in-powershell/21209726#21209726
これらのURLで、なにか実現しているような記載はあるのですが、
機械翻訳っぽいところや、リンク先の英語なども読めないので、何すればいいのかさっぱりです。

ご存知の方おられましたら、教えてください。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/08/12 12:27

そういうプログラムを自分で開発したいという質問でしょうか?
standard-soft

2020/08/12 13:38

少し修正しました。 どの方法でもいいのですが、何かコマンドで実現できる方法があれば助かります。
Zuishin

2020/08/12 14:01

RoboCopy は進捗が表示されたはずですが。
otn

2020/08/12 14:38

プログラムを作りたいわけじゃなくて、GUIのコピー進捗画面が欲しいなら、ファイルコピーのGUIツールを窓の杜などで探して入れると良いです。 自分でコピープログラムを書くとまず間違いなく遅いです。
standard-soft

2020/08/13 06:14

RoboCopyだと、エクスプローラのファイルコピーのようなきれいなグラフがでる進捗ダイアログが出るのでしょうか? なるほど、FireFileCopyとかをコマンドで呼び出せということですね。ありがとうございます。
otn

2020/08/13 07:00

> RoboCopyだと、エクスプローラのファイルコピーのようなきれいなグラフがでる進捗ダイアログが出るのでしょうか? やってみれば分かりますが、GUIじゃないです。進捗が分かるという意味でしょう。 ただ、%表示されるのはファイル単位の進捗なので、巨大ファイル1つだけという場合を除き、全体の進捗は分からないと思います。
standard-soft

2020/08/20 07:45

otnさんありがとうございます。 今回は、コマンド起動で、GUIのダイアログを出したいという要望でした。 わかりにくくてすいません、RoboCopyはCUIで進捗が出るのはいいですね。
guest

回答2

0

C#で作成するなら、ShFileOperation.Copyを使うのが比較的簡単でしょう。ググればコードのサンプルも出てきます。

後継としてIFileOperationもありますが、サンプルは少なめです。

投稿2020/08/12 14:22

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

standard-soft

2020/08/13 06:47

ありがとうございます。検討します。
Zuishin

2020/08/13 10:25

ShFileOperation を直接使うには P/Invoke を使う必要がありますが、PowerShell の場合にはそれを COM から呼び出す Shell.Application を使うほうが簡単かもしれません。 以下はファイルやフォルダをゴミ箱に移動するサンプルです。 https://qiita.com/Zuishin/items/1fa77bccd111b55f7bf6 ゴミ箱以外の場所を指定するには $shell.NameSpace(10) の代わりに $shell.NameSpace('C:\Users\Zuishin\abc.txt') のようにフルパスで指定します。
standard-soft

2020/08/14 08:25

Zuishinさん、ありがとうございます。大変参考になっています。
guest

0

自己解決

Zuishinさんのコメントと記事

PowerShell でファイルやフォルダをごみ箱に入れる - Qiita
https://qiita.com/Zuishin/items/1fa77bccd111b55f7bf6

こちらを参考にさせていただき

powershell

1$shell = New-Object -ComObject Shell.Application 2$to = $shell.NameSpace('コピー元フォルダフルパス') 3$to.CopyHere('コピー元フォルダフルパス') 4

このコードをcopy.ps1という名前で保存してコマンドで実行することで、Windowsファイルエクスプローラーが表示する進捗ダイアログを表示することができました。

ありがとうございます。

また、追加の質問なのですが
コピー元フォルダパスから、名前で除外フォルダを指定することはできるでしょうか?

robocopy では、/XD オプションで簡単だったのですが、このPowerShellの方法では調べてみたのですが見つかりませんでした。

あるいは、複数のフォルダやファイルを一度にNameSpaceに送る方法があれば、そのようなものでも助かります。
(そうすれば除外フォルダを自分で除外するコマンドを作れる)

もしわかりましたら教えていただけると助かります。

質問に追加質問ですいません。

投稿2020/08/14 08:24

編集2020/08/14 10:32
standard-soft

総合スコア196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問