1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ネットワーク越しの多数ファイルコピーが遅いので、圧縮し送って相手側で展開した

Last updated at Posted at 2024-02-21

ネットワーク越しの多数ファイルコピーが遅い

600~1000個くらいのファイルを遅めのネットワーク越しに送ることがよくある。
相手PCの特定のフォルダに置かれているべき設定ファイル一式、みたいなの。
これが遅くて、時間帯によっては5分くらいかかることもある。
完了まで見守るのがイヤ。

まとめてコピーしても実際の処理は1個ずつやってるんで遅いようだ。
アーカイブして送って、相手側で展開すれば早いよな。というわけで考える。

方針

ひとまずzipにまとめて相手側へコピーして単純に展開操作してみる。
遅い。
この操作だと相手側にあるzipを手元PCで展開して相手側へ保存してるので、1個ずつコピーしてるのと同じことである。

1.相手側へアーカイブを保存
2.相手側でアーカイブを展開
こうしなければ解決できない。

相手側へアーカイブを保存

権限あるので、管理共有使って送るだけ。

set /p HOSTNAME=
copy /y InitialSettings.zip \\%HOSTNAME%\c$\folder

相手側でアーカイブを展開

ここでしばらく悩んだ。
コマンドプロンプトの標準的な範囲でzipファイルは取り扱えない。
あれこれ追加すればできるものの、「相手側で」実行できなければならないので、相手側に余計な設定やファイルは残したくない。
PowerShellならExpand-Archiveで展開できるが、PowerShellは実行ポリシーとか相手側で実行とかが面倒だ。そもそもPowerShell使うなら最初から全部PowerShellで書きたいしいまさら(意地)。

ここは7-zipコマンドライン版を使うことにする。
https://7-zip.opensource.jp/howto/non-install-extract.html
単体で動作するので、7za.exeを相手側へコピーして、相手側で実行して、終わったら削除すればよい。

相手側で実行する

相手側でアーカイブ展開処理を実行するには、毎度おなじみpsexecを使う。
相手側で実行したい処理を別のbatに書き、-cオプションを付けてやれば、「バッチをコピーして、相手側で実行」してくれる。

PsExec - Sysinternals
https://learn.microsoft.com/ja-jp/sysinternals/downloads/psexec

psexec \\%HOSTNAME% -c bat2.bat
bat2.bat
@echo off
cd c:\folder
7za x -y InitialSettings.zip

del 7za.exe
del InitialSettings.zip

できあがり

bat1.bat
@echo off
setlocal
cd %~dp0

echo 設定ファイルアーカイブをコピー 対象HOSTNAME入力
set /p HOSTNAME=
copy /y InitialSettings.zip \\%HOSTNAME%\c$\folder
copy /y 7za.exe \\%HOSTNAME%\c$\folder

psexec \\%HOSTNAME% -c bat2.bat

echo 終了確認 キー入力で終了
PAUSE
bat2.bat
@echo off
cd c:\folder
7za x -y InitialSettings.zip

del 7za.exe
del InitialSettings.zip

数秒で終わるようになった。満足。

1
1
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?