[PowerShell]ファイルサーバのファイル一覧を取得する

はじめに

Windowsコマンドプロンプトで「PC内のファイル一覧」を取得する方法は以下の通りです。

このコマンドで「ファイルサーバのファイル一覧」を取得しようとすると、「CMD では UNC パスは現在のディレクトリとしてサポートされません。」というエラーになり取得できません。

そこで、「ファイルサーバのファイル一覧」を「PowerShell」で取得してみます。

ワンライナー

dir \\file-sever\targetDir -Recurse -Name -File | Sort-Object | Out-File .\fileListFromWinDir.txt -Encoding default

処理の流れ

  1. Get-ChildItemコマンドレットでファイル一覧を取得(エイリアス:dir)
  2. Sort-Objectコマンドレットで昇順に並び替え
  3. Out-Fileコマンドレットでファイルに出力
dirのパラメータ
  • -Recurse:子フォルダを再帰的に取得
  • -Name:名称のみ取得
       (最終更新日・サイズ等が不要でフォルダ/ファイル名だけを取得)
  • -File:ファイルのみ取得

スクリプト

ソースコード

# fileList.ps1
#  指定のフォルダ配下のファイル一覧を作成する

param($targetDir)

# ISEでの実行用に引数に初期値を設定する
if($targetDir -eq $null){ $targetDir = '\\file-sever\targetDir' }    # 適宜コメントアウト

# 出力するファイル一覧のファイル名
$OutFile = ".\fileList.txt"

# パラメタチェック
if ($targetDir -eq $null) {
    Write-Host "引数が足りません。(引数1:フォルダ)処理を中止します。"
    exit 1
}

# フォルダの存在チェック
if (!(Test-Path $targetDir)) {
    Write-Host "指定のフォルダが存在しません。処理を中止します。"
    exit 1
}

# ファイル一覧取得
#  1.ファイル一覧を取得
#  2.昇順に並び替え
#  3.デフォルトの文字コード(SJIS)でファイルに出力
try {
    $FileList = dir $targetDir -Recurse -Name -File | Sort-Object | Out-File $OutFile -Encoding default

} catch [Exception] {
    $exp = $error[0].ToString()
    Write-Host ($exp)
}

実行方法

Windowsコマンドプロンプトで以下のコマンドを実行します。

powershell -NoProfile -ExecutionPolicy RemoteSigned .\fileList.ps1 \\file-sever\targetDir

コメント

タイトルとURLをコピーしました