はじめに
Windowsコマンドプロンプトで「PC内のファイル一覧」を取得する方法は以下の通りです。
このコマンドで「ファイルサーバのファイル一覧」を取得しようとすると、「CMD では UNC パスは現在のディレクトリとしてサポートされません。」というエラーになり取得できません。
そこで、「ファイルサーバのファイル一覧」を「PowerShell」で取得してみます。
ワンライナー
dir \\file-sever\targetDir -Recurse -Name -File | Sort-Object | Out-File .\fileListFromWinDir.txt -Encoding default
処理の流れ
Get-ChildItem
コマンドレットでファイル一覧を取得(エイリアス:dir)Sort-Object
コマンドレットで昇順に並び替え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
コメント