- ベストアンサー
HDDのフルパスをテキストファイルに高速に書き出す
HDDのフルパス(含むファイル名)一覧をテキストファイルで高速に書き出すツールなどを探しています。 ネットで検索するとツールとしてかなりの候補がありますが 正直、高速(短時間)で処理できるツールがどれなのか?良くわかりません。 昨今、HDD(SSD)も2TBなど容量が大きなものが当たり前の時代になっています。 例えば、HDD(D:ドライブ)のD:¥以下の全てのサブフォルダーを含めて 全てチェックして書き出すのは 時間が必要と思われなるべく短時間で処理できそうなツール等を紹介ください。 ツールで無く、コマンド(Powershell、bat)で処理出来て コマンドの方が高速ならコマンドで処理する方法を紹介ください。 なお、テキストファイルに書き出す内容は、フルパス(含むファイル名)だけで ファイルサイズや更新日などの付属情報は必要無いです。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
同時に接続はしないで、1台ずつ差し替えて接続するのなら、動作すると思います。 別の方法では、ボリューム シリアル番号を使っても識別は出来ると思います。 この場合は、同時に接続しても識別出来ると思います。 カレントをドライブレターにして、vol とコマンドを入力すると、16進数の、4桁-4桁で表示されます。 vol | find "5B37-158A">nul && set ID=X みたいな感じで。 ボリューム シリアル番号は、フォーマットした時に生成されるものです。なので、フォーマットしたら変わります。
その他の回答 (11)
- redslove10
- ベストアンサー率41% (408/992)
PowerShellでD:\に移動して Get-ChildItem -Recurse -File | Select-Object -Property FullName を実行する
お礼
redslove10さん、powershellでの回答ありがとうございます。 個人的にPowerShellの超初心者でド素人です。 一応、下記でtest.txtにファイル名は書き出せました。 Set-Location K: Get-ChildItem -Recurse -File | Select-Object -Property FullName | Out-File "K:\test.txt" しかし、TextEditorでtest.txtファイルを見ると 最初の2行に以下のような不要な書き込みがあります。 これは、不必要なので記載されないように出来ないのでしょうか (TextEditorで削除するのは簡単ですが、できれば手間を省きたい) FullName -------- 又、以下のようになぜだかファイル名の後ろに複数の半角のスペースが書き込まれています この半角スペースも不必要なので削除したい。 (半角のスペースの数は、ファイル名によって違うのでTextEditorで一括削除と言う訳にも行きません。) K:\ととろのモリ.mp3 _________________________________________ ______________________________ は、複数の半角スペースを表します。
補足
調べたら以下のURLが症状的には当てはまります。 https://www.k-hitorigoto.online/entry/2017/03/26/183536 ド素人の悲しさ。 URLに記載している対策を反映できません。 以下の現在のコードに反映する方法があれば教えてください。 Set-Location K: Get-ChildItem -Recurse -File | Select-Object -Property FullName | Out-File "K:\test.txt"
- 1
- 2
お礼
お世話になりました。 こちらで相談させていただいて 満足できるコードができました。 REM ドライブレターの全フォルダー名のみを階層を含めて出力 REM ドライブ直下のファイル名(フルパス)の出力にも対応 REM ---------------------------------------------------- @echo on set /p D="ドライブを入力してください <例> K --> " REM 「cd D:\フォルダー名」と入力することで、現在のディレクトリであるDドライブの特定のフォルダーにアクセスすることができます。 REM しかし、現在の作業ドライブやディレクトリがCドライブである場合、このコマンドは機能しません。 REM その場合は、コマンドプロンプトでCDコマンドを使わずに、コマンド「cd /d d:」を使用します。 REM このコマンドを実行すると、現在のDドライブのディレクトリに移動し、現在のドライブもDドライブに変更されます。 cd /d %D%: REM ゴミ箱とドライブ内のゴミ箱の中身をクリア rd /s /q %D%:\$Recycle.Bin REM サーチ先のドライブに移動して以下の作業を行う(書き出しもサーチ先になる) REM -- ドライブレターの全フォルダー名のみを階層を含めて出力 REM /b : ファイルやディレクトリ名のみ (要約や日時、サイズなどを省略) REM /ad : フォルダ名のみ REM /s : 指定したディレクトリおよびそのサブディレクトリ(階層も含める) dir /b /ad /s > C:\temp\temp1.txt REM -- /a-d ドライブ直下のファイル名のみを出力 dir /b /a-d > C:\temp\temp2.txt REM ファイル結合してコピー テキストで書き出す。 デフォルト --> Copy /a copy /a C:\temp\temp2.txt + C:\temp\temp1.txt C:\temp\temp.txt REM tempファイル削除(del /Q --> 確認メッセージが表示されずに DEL コマンドを実行) del /Q C:\temp\temp1.txt del /Q C:\temp\temp2.txt REM 出力ファイルをソート sort /o C:\temp\FileName_ListUp.txt C:\temp\temp.txt REM シート前のファイルは削除(del /Q --> 確認メッセージが表示されずに DEL コマンドを実行) del /Q C:\temp\temp.txt REM ------------------------------------------------ REM Vol1, Vol2, Vol3という変数にボリューム名をセット set Vol1=K-N set Vol2=456 set Vol3=789 REM IDという変数を空でセット set ID= REM wmicコマンドでHDDのvolumenumberを取得し、findコマンドでVol1, Vol2, Vol3の値を検索 REM errorlevelの値に応じて、IDという変数にX, Y, Zの値をセット wmic logicaldisk get volumename | find "%Vol1%" if %errorlevel% EQU 0 set ID=X wmic logicaldisk get volumename | find "%Vol2%" if %errorlevel% EQU 0 set ID=Y wmic logicaldisk get volumename | find "%Vol3%" if %errorlevel% EQU 0 set ID=Z REM 調査結果の表示、numの値で、serialnumberの中に一致するものがあった場合、ID=X,Y,Zを表示し REM ドライブを加味したファイル名に変名。 REM 変名にrenameを使うと上書きが出来ないのでmoveを使用(オプションなしでは上書き確認無し) REM serialnumberの中に一致するものがなかった場合、IDには何もセットせずに表示。 if defined ID ( echo Match found. ID=%ID% move C:\temp\FileName_ListUp.txt C:\temp\%ID%_FileName_ListUp.txt ) else ( echo No match found. ID=%ID% ) echo. echo " ---- 処理が終了しました。 -----" & pause exit /b