最近手機上的 SD card 發生了問題,說要重新格式化,上面一堆照片怎能格式化,於是拿到電腦上用讀卡機搶救,幸好還可以讀,想說趕快 copy 出來,一開始整個資料夾備份,但讀沒幾個檔就出現錯誤 0x80070022 或 0x80070057 說 SD 有問題,需要重插拔才會好
後來發現一個一個檔用剪下貼上的,可以多備份幾個檔,但整張卡檔案有好幾百個阿,一個一個剪下貼上不知要到何時,所以寫了以下批次檔來幫我做:
後來發現一個一個檔用剪下貼上的,可以多備份幾個檔,但整張卡檔案有好幾百個阿,一個一個剪下貼上不知要到何時,所以寫了以下批次檔來幫我做:
@echo off
if "%1" == "" goto endbackup
if "%2" == "" goto endbackup
setlocal enabledelayedexpansion
:start
for /f "delims=" %%i in ('dir /s /b /on %1\*.*') do (
if exist %%~i\ (
echo md %2%%~pni
md %2%%~pni
) else (
echo mov %%i %2%%~pi
if not exist %2%%~pnxi (
move /-Y %%i %2%%~pi || goto resetusb
)
)
)
:endbackup
有了上面那個批次檔以後可以不用一個一個檔 copy 了,但還是會發生 SD 錯誤,要重插拔才會好,插了幾次之後,除了怕要重插上百次以外也怕 USB port 壞掉,想說以前 linux 有個 usbreset 的工具可以重置 usb 裝置,想說 windows 會不會也有,後來找到 devcon.exe 可以用(32bit & 64bit OS 有分,要注意一下不然會不能控制裝置),因此批次檔改為下面那個內容,其中 devcon restart 有時會失敗,叫我要重開機,所以等了一下再重試一次,若一直出現 requires reboot,就試著加大重試等待時間。
@echo off
if "%1" == "" goto endbackup
if "%2" == "" goto endbackup
setlocal enabledelayedexpansion
:start
for /f "delims=" %%i in ('dir /s /b /on %1\*.*') do (
if exist %%~i\ (
echo md %2%%~pni
md %2%%~pni
) else (
echo mov %%i %2%%~pi
if not exist %2%%~pnxi (
move /-Y %%i %2%%~pi || goto resetusb
)
)
)
goto endbackup
:resetusb
devcon restart "@USB\VID_14CD&PID_125A\812520090519"
if not "%errorlevel%" == "0" (
timeout /t 30
goto resetusb
)
timeout /t 30
goto start
:endbackup
這下終於可以放著不管它了 😃
使用方法:
backup.bat 來源資料夾 目的資料夾 (資料夾後面不可加 "\")
如: backup.bat h:\DCIM d:\backup
參考資料: http://delphintipz.blogspot.com/2012/07/disable-failed-no-devices-disabled.html