2019年5月26日日曜日

Windowsの標準機能だけを使って、ファイルをソートしてコピーする

 Windowsのエクスプローラーを使ってフォルダの中のファイル一覧を見ているときはソートされた状態で表示されているので気にならないと思うのですが、実際のファイルシステムの中は、結構バラバラで保存されています。
 エクスプローラーでファイルをコピーすると、そのバラバラの順番でファイルコピーが実行されるので、コピー先のファイルシステムの中もバラバラになります。
 普通は問題にならないと思うのですが、一部の音楽プレーヤーやカーナビなどは、そのファイルシステムの順番で音楽を再生してしまうので、思ったように曲が再生されないなどの問題が起きます。
 解決方法として、専用のソフトを使ってファイルシステムを直接並び替えるという方法もあるのですが、標準の方法でもないのでリスクもあり、リスク無しで解決しようとすると、ファイルをソートした順番でコピーするということになります。
 ソートしながらコピーもフリーウェアなどを使ってもいいのですが、Windowsの標準機能だけでも実現することができます。

ということでバッチファイルを作成してみました。

【SortCopy.bat】

echo off
setlocal enabledelayedexpansion
for /F "usebackq delims==" %%i in (`SortCopyEscape.bat %1`) do (

set SRC=%%i
set DEST=!SRC:%1=%2!

echo F | xcopy /F /Y !SRC! !DEST! >nul
echo copy !SRC! → !DEST!
)
endlocal


【SortCopyEscape.bat】

@echo off
for /F "usebackq delims==" %%i in (`dir /S /B /A:-D %1 ^| SORT`) do (

call :REPLACE "%%i"
)
exit /b

:REPLACE
set TMP=%1
echo %TMP:!=^!%
exit /b


 使い方は、2つのファイルをカレントディレクトリにコピーして、

 SorrtCopy <コピー元フォルダ> <コピー先フォルダ>

 です。
 自由に使ってもらってかまいませんが、使用したことで起きた結果について責任を取りませんので、各自の責任でお願いします。

0 件のコメント:

コメントを投稿