フォルダをまたがって存在している大量のzipファイルを、一か所に集約して一括解凍する

 

やりたいこと

以下「フォルダ構造イメージ」のような形で、フォルダをまたがりながら大量のzipファイルが存在している。一つ一つ階層たどってファイルにたどり着いては解凍するという作業をしているが、とにかく時間がかかるし、階層を何回も上ったり下ったりしているとうっかり解凍し忘れるファイルも出てくる。自動化することにした。

 

また、解凍後は中を確認していくという作業があるので、フォルダをまたがって存在しているのも避けたい。ファイルは1か所にまとめることにする。

 

フォルダ構造イメージ

解凍したいzipファイルは複数のフォルダに散在。以下はイメージにつき2ファイルしかないが、実際は十数ファイル程ある。

 

手順

①以下を記載したバッチファイルを作成する。

(バッチファイルの作成方法:メモ帳に以下をコピペしファイルを保存して閉じた後、ファイルの拡張子を.batに変更)

 

cd /d C:\Users\…(※1)
for /r %%i in (*.zip) do copy %%i C:\Users…(※2)

@echo off
cd /d %~dp0

dir /b /s *.zip>%~dp0zips.txt

for /f %%a in (%~dp0zips.txt) do (
powershell -command "Expand-Archive -Path %%a -DestinationPath %%~na"
)

(※1)「この階層配下のファイルを集めたい」と思っている階層のパス(上記イメージ例の場合、AAフォルダとBBフォルダの親フォルダ。赤枠の部分の値)

(※2)集め先のパス(任意。「このフォルダに集めたい」と思うパス。)

 

②バッチファイルを配置し実施する

上記で作ったバッチファイルを、(※2)集め先のパスに配置する。



 

 

 

配置後、ダブルクリックして実行すると・・

 

 

解凍された。zip.txtは不要なので消してOK。

 

解説

cd /d C:\Users\…(※1) 

カレントディレクトリの変更をするコマンド。/dはドライブをまたがる変更をしたい場合には必要。

 

for /r %%i in (*.zip) do copy %%i C:\Users…(※2)

特定の処理を繰り返すためのコマンド。今回は、複数のファイルをコピーしてきたいので、ファイルの数だけコピーを繰り返す必要があることから必要な一文。Forコマンドの基本的な記述方法は以下。

FOR (オプション) %%変数 IN (繰り返し処理をしたい対象) DO コマンド

変数は、コマンドラインで使用する場合は%変数と記述し、今回のようにバッチファイルに記述する場合は%%変数とする。

 

(オプション)…今回記述した/rはディレクトリ名およびサブディレクトリ名を対象にするという意。

 

参考にさせていただいた情報↓

 

cd /d %~dp0

%0…バッチファイル自身

~dp…~は、フォルダ名にスペースが入る場合の対策のためにパスに自動でついてくる""を削除する意。Program Filesを"Program Fies"と認識しているが、これの””を外す。dはドライブ名を抽出する、pはファイル名以外のパスを抽出する意味。

→つまり、cd /d %~dp0で、カレントディレクトリを、そのバッチファイルがあるディレクトリに移動させている。

 

dir /b /s *.zip>%~dp0zips.txt

dirコマンドはファイル・ディレクトリ情報を表示するコマンド。

/b は、ファイル名のみを表示させるためのオプション。

/s は、サブディレクトリは以下のファイルも含めて表示させるためのオプション。

>はリダイレクト機能と言い、実行結果を>より右に記載したファイル名のファイルに書き込んでいる。

 

for /f %%a in (%~dp0zips.txt) do (
powershell -command "Expand-Archive -Path %%a -DestinationPath %%~na"

Forコマンドの基本的な記述方法は上述の通り。/fはテキストファイルの内容を取得して変数に代入するオプション。今回は、上記dir /b /s *.zip>%~dp0zips.txtで%~dp0zips.txtというテキストファイルを作ったので、その中に記載されている内容(つまり今回の場合、dir /b /s *.zipの実行結果であり、すなわち解凍したいzipファイルのフルパス)を変数に代入している。

 

powershell -command "Expand-Archive -Path %%a -DestinationPath %%~na"は、Powershellのコマンドで、ファイル解凍をする際のコマンド。

 

 

qiita.com

Webシステム 超基本!構成

  • 構成
    Webシステムの構成超概要。Webシステムって一般的に何で構成されているのか+構成要素である3種類のサーバの役割超概要までここでは記載。(3種類のサーバの詳細はまた別途記載したいと思う)

    • Clientとサーバの構成にしていることが主流(これが俗にいう「Client-サーバ構成」)
    • サーバ側はさらに、Webサーバ、APサーバ、DBサーバと3種類用意していることが多い(これが俗にいう「3層アーキテクチャ」)
    • Webサーバは、Clientが要求したWebページ(のうちの静的ページ)を返却してくれる役割のサーバ。
    • APサーバは、Clientが要求したWebページを作ってくれる役割のサーバ。
    • DBサーバは、APサーバがWebページを作るのに必要なデータを処理してくれる役割のサーバ。

  • Webサーバの種類
    恥ずかしながらApacheしか聞いたことなかった。主流どころは以下のよう。
  • APサーバの種類
    恥ずかしながらTomcatApacheTomcatの違いすら知らなかった。いや、でもそもそも名前が紛らわしい・・TomcatApacheと付くのは、開発元がWebサーバのApacheと同じApache Softweare Fondationであるかららしい。
  • DBサーバの種類
    この辺りはさすがに知っているもの多かった。(でも違い言えますかと言われるとほんとちょっとしか出てこない・・この辺りも別途詳細ページ作って勉強したいと思います)

【学びなおし】IT基礎

新卒でSIerに入社して5年、SIerってぶっちゃけ製造(コーディングとか)はしないのでサーバやプログラムが動く仕組みとか諸IT用語とかへの深い理解を怠り無免許運転でノリで過ごしてきちゃってたのですが、よくないなと思い勉強。

 

参考書読むだけとかは退屈すぎるので、自分の言葉で何かに書き残していきたい‥ということでここに投下したていきたいと思います。

 

ほぼ自己満です。IT完全初心者にとっては少しは有益かも・・基本情報取ろうとしている人とか・・オンライン上に書き残すことで誰かの力に少しでもなれれば儲けものだなというゆるーい気持ちで細々書いていければと思います。