• ベストアンサー

HDDのフルパスをテキストファイルに高速に書き出す

HDDのフルパス(含むファイル名)一覧をテキストファイルで高速に書き出すツールなどを探しています。 ネットで検索するとツールとしてかなりの候補がありますが 正直、高速(短時間)で処理できるツールがどれなのか?良くわかりません。 昨今、HDD(SSD)も2TBなど容量が大きなものが当たり前の時代になっています。 例えば、HDD(D:ドライブ)のD:¥以下の全てのサブフォルダーを含めて 全てチェックして書き出すのは 時間が必要と思われなるべく短時間で処理できそうなツール等を紹介ください。 ツールで無く、コマンド(Powershell、bat)で処理出来て コマンドの方が高速ならコマンドで処理する方法を紹介ください。 なお、テキストファイルに書き出す内容は、フルパス(含むファイル名)だけで ファイルサイズや更新日などの付属情報は必要無いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • UY-Scuti
  • ベストアンサー率82% (14/17)
回答No.12

同時に接続はしないで、1台ずつ差し替えて接続するのなら、動作すると思います。 別の方法では、ボリューム シリアル番号を使っても識別は出来ると思います。 この場合は、同時に接続しても識別出来ると思います。 カレントをドライブレターにして、vol とコマンドを入力すると、16進数の、4桁-4桁で表示されます。 vol | find "5B37-158A">nul && set ID=X みたいな感じで。 ボリューム シリアル番号は、フォーマットした時に生成されるものです。なので、フォーマットしたら変わります。

NuboChan
質問者

お礼

お世話になりました。 こちらで相談させていただいて  満足できるコードができました。   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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (11)

回答No.1

PowerShellでD:\に移動して Get-ChildItem -Recurse -File | Select-Object -Property FullName を実行する

NuboChan
質問者

お礼

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 _________________________________________ ______________________________ は、複数の半角スペースを表します。

NuboChan
質問者

補足

調べたら以下の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"

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • powershell 新たにpathを通すには?

    powershell を使いはじめました。 カレントdirのファイルを指定する時にデフォルトでは ./ を頭に打たないと探せません。 おそらくpathが通ってない事が原因だと思います。 そこで新たにpathを加える設定したいのですが、コマンドレットではどのように打てばよいのでしょうか? また設定されているpathを参照するコマンドレットも合わせてお教えいただければと思います。

  • ファイルの最大パスとは

    初歩的な質問です。 ・Windows 10で、最大パスを持ったファイルを作ってみたところ、フルパスが259文字ではなく、247文字のファイルしか作れませんでした。これはなぜなんでしょうか。 ・SDカードは32GBと64GBを使っています。なので、32GBのSDカードは「FAT32」でフォーマットされていると思いますが、FAT32とNTFSでは、ファイルの文字数の数え方や最大パスなどに違いはないような気がするのですが、ネットで検索してみると異なっているような解説もありました(FAT16に対しての解説なのでしょうか??)。実際はどうなのでしょうか。 「長過ぎるパス名にご用心 - AtFILE_Guide」 https://secure01.blue.shared-server.net/www.yes-online.jp/atfile_guide/Filer_PathNameLength.html 疑問のきっかけは、WindowsとLinux (Ubuntu) で、SDカードを使ってファイルをやりとりすることが増えて、ファイル名やフォルダ名の最大文字数や、ファイルやフォルダの最大のパスについて調べていたときでした。 下のように、7階層のフォルダの下に、ファイル名が半角または全角のテキストファイルをを作ろうとすると78文字(フルパス247文字)のファイル名しか付けられず、それを超える文字数(78文字からさらに12文字追加するとフルパスが259文字になる)を追加することができませんでした。なぜなんでしょうか。 ●半角で、できるだけ長いファイル名のテキストファイルを作成 D:\01\3333\4444444444\5555555555\6666666666\7777777777\8888888888\9999999999\0000000000\1111111111\2222222222\3333333333\4444444444\5555555555\6666666666\7777777777\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt ←これ以上の文字数のファイル名を付けることができませんでした(フルパスは247となりました) ●全角で、できるだけ長いファイル名のテキストファイルを作成 D:\01\3333\4444444444\5555555555\6666666666\7777777777\8888888888\9999999999\0000000000\1111111111\2222222222\3333333333\4444444444\5555555555\6666666666\7777777777\ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ.txt ←これ以上の文字数のファイル名を付けることができませんでした(フルパスは247となりました)

  • PowerShellで処理を簡単にしたい

    PowerShellは、ど素人です。 PowershellであるPs1ファイルを実行するのに 現在下記の手順で行っています。 1)PowerShellを管理者権限で実行 2)以下のコマンドを最初に実行 powershell set-executionPolicy remoteSigned 3)次に以下のコマンドを実行 powershell -File C:\Users\Mic\Desktop\Keep\sample.ps1 毎回、2),3)をPowerShellの画面にコピペして処理しています。 もう少し簡単な手順になれば嬉しいのですが、 1),2),3)を一つのBATで処理するような方法はありませんか ? BATに限らず手順が減るような方法があれば教えてください。

  • パスを通すバッチファイルの作り方

    Windowsで、ある処理を行うバッチファイル(.bat)の作り方を 教えてください。 ・機能:システム環境変数 Path に、C:\TestFolderを追加 (パスを通すバッチ) ・変更は再起動後も有効。 ・GUIでの変更方法をわかるので、バッチファイルの記述方法を教えてください。 よろしくお願いします。

  • batファイル処理でのテキストファイルの内容変更

    batファイル処理のみにてテキストファイルの内容を変更する事は可能でしょうか。 例えば aaa=1111 bbb=2222 ccc=3333 ddd=4444 という内容のテキストファイルが存在し、batファイルにて aaa=1111 bbb=2222 ccc=5555 ddd=4444 というように、指定行の内容を変更させたいのですが、この処理をbatファイルのみで行う事は可能でしょうか。 宜しくお願いします。

  • batファイル処理でのテキストファイルの内容を編集

    batファイル処理のみにてテキストファイルの内容を編集する事は可能でしょうか。 例えば aaa=0 bbb=0 ccc=0 ddd=0 という内容のテキストファイルが存在し、batファイルにて aaa=0 bbb=1 ccc=1 ddd=0 というように、指定行の内容を変更させたいのですが、この処理をbatファイルのみで行う事は可能でしょうか。 宜しくお願いします。

  • ファイルサーバのファイルを高速に複写したい

    ファイルサーバのファイルを高速に複写したいのですが、お勧めの方法はありませんか? Windows2000 サーバ 容量約200GB フォルダ多数 とりあえず、robocopyを使用する予定ですが、 もっと早い、コマンドやツールを紹介してください。

  • powershellどんなファイル名でも取得したい

    本来はps1ファイルにドロップして実行したい動作があるのですが、 通常できないのでbatを仲介役として実行しています。 問題はファイル名によっては正常に読み込まれない事があります。 まず、以下がbatファイルの内容として、 [123.bat]-------------------------- @echo off powershell "D:\...\ABC.ps1" ""%1"" ------------------------------------- ps1ファイルは以下の内容とします。 [ABC.ps1]-------------------------- "$Args" ------------------------------------- 123.batにファイルをドロップすると""%1""として、 ABC.ps1へ渡されます。 しかし、ファイル名によっては途中で途切れてしまい正常に読み込めません。 ・半角丸括弧の場合 例えば「D:\...\(1).txt」と言うファイルをドロップすると、 batでは「""D:\...\(1).txt""」と認識されるも、 ps1では「D:\...\」となり、親パスまでしか認識されません。 但し、ファイル名によっては丸括弧が存在していても問題ない場合があります。 また、理由は不明ですが123.batの「""%1""」を「"""%1"""」のように、 ダブルクォートを3つにすると認識し正常に動作が可能となります。 ・半角&の場合 例えば「D:\...\りんご&みかん.txt」と言うファイルをドロップすると、 batとpa1ともに「D:\...\りんご」で後半がとぎれます。 これはダブルクォートが3つでも同じです。 他にもいくつか存在すると思いますが、 どんなファイル名でも単純な文字列として取得する方法あるでしょうか。 ファイル名自体を変更して解決はできないです。 どなたかご教授のほどよろしくお願いいたします。

  • Powershellで外部テキストファイルより

    まだまだPowershellの初心者で勉強中です。よろしくお願いします。 下記のような記述がしてある『applist.txt』というテキストファイルがあります。 ホスト名  チーム名 abc123  ponpon666 12def456  gekogeko777 ghi78912  fufufu888 Powershellで、まず端末のホスト名を取得し、その値と、上記の『C:\share』というフォルダの中にあるテキストのホスト名と一致した行にある値を表示したいのです。 外部テキストは、他の作業でも使用するため編集はできません。 作ってみたものは、   $result = ipconfig /all $hostname = $result[6].split(":")[1].Trim()  Select-String $hostname -Path C:\share\applist.txt  として、  ホスト名がghi78912という名前のPCのPowershell ISEで実行したところ  C:\share\applist.txt:3:ghi78912 fufufu888 と1行分が出てしまいます。 これをチーム名のfufufu888だけが取得できるようにするには、どのようにすると良いのか、教えていただけませんでしょうか。

  • dumpファイルをテキストに書きおこす(linux

    dumpファイルを今、テキストに書き写しています。 linuxでコマンドを使用して行っています。 ちなみにコマンドはこんな感じです。 tcpdump -qr ファイル名 | less >& テキストファイル名 です。 一応、書き込みは成功しているのですが、 時間がかなりかかっています。 これって時間がかかるのは仕方ないのは分かるのですが、 終わりますかね・・・? 書き写して1時間たってますが、いまだに終わりません・・・。 dumpファイルだとコマンドが必要なので すぐ見れるようにしたいのですが、ファイルが大きすぎるのか 全部を見ることが困難です。 ファイルを全部見ることと、コマンドなしでも見れるようにしたいのですが そういう方法はあるのでしょうか? あと上のコマンドで書き込んでいますが、終わるのでしょうか? (ちなみにファイルサイズは大体200~500MBです)