ハードなソフトの話

アクセスカウンタ

zoom RSS SkyDriveが急にファイル名に使用できない文字があるエラーになった

<<   作成日時 : 2012/07/19 23:42   >>

驚いた ブログ気持玉 1 / トラックバック 0 / コメント 0

ずっと前から、SkyDriveでInternet Explorerの「お気に入り」を同期している。しかし、2012年7月未明から、Windowsの起動時にSkyDrive下記のメッセージが表示されるようになった。

このファイル名に使用できない文字が含まれています

詳細を表示すると、下記のようなメッセージボックスが表示された。

image

このメッセージボックスの内容はおかしい。なぜなら、もともと存在するファイルを同期しているだけなのだから、使用できない文字がファイル名に含まれているはずがない。しかも、これらのURLファイルは、かなり昔に作成したものだ。初めてSkyDriveを使用したときに表示されるはずである。

念のため、下記のリンクも参照してみた。

ファイルのアップロードに関する問題を解決する - SkyDrive

「ファイル名に使用できない文字が含まれています。」の項目を見るとお馴染みのファイルには使用できない文字が一覧になっていた。

/ スラッシュ

\ 円記号

< 小なり記号

> 大なり記号

: コロン

| 縦線

*   アスタリスク

; セミコロン

? 疑問符

“ 二重引用符

そして、エラーになったファイル名を見ると確かに「:(コロン)」が含まれていた。全角で…。

つまり、全角か半角に関係なく、コロンなどの文字が含まれるとエラーになる。

そんなわけで、「ファイル名に使用できなくなった文字」を含む文字を検索して、ファイル名を変更するためのバッチファイルを書いた。

ファイル名: bad-char-changer.bat

@rem -*- bat -*- coding:cp-932-dos ?*-
@echo off
setlocal EnableDelayedExpansion

rem ファイルパスの設定
set logfile=%~dpn0.log
set batfile=%~dp0\change.bat
set localdir=%USERPROFILE%\Favorites
set SkyDir=%USERPROFILE%\SkyDrive\お気に入り
rem 出力ファイルの削除  
del %logfile% 2> nul
del %batfile% 2> nul

rem カウンタの初期化
set count_all=0
set count_bad=0

echo.                                      >> %logfile%
echo --- ローカルの検出対象: %locadir% --- >> %logfile%
echo.                                      >> %logfile%
call :scan_files %localdir%
call :summary %localdir%

echo.                                      >> %logfile%
echo --- SkyDriveの検出対象: %skydir% ---  >> %logfile%
echo.                                      >> %logfile%
call :scan_files %skydir%
call :summary %skydir%

rem ログファイルの表示
start notepad %logfile%
goto :eof

rem ---------------------------

:scan_files
rem ファイルの検出

set count_all=0
set count_bad=0

for /r  %1 %%F in ( *.url ) do (
    set /a count_all+=1
    set org=%%~nxF
    call :change_bad_name
    if !org! neq !chg! (
        call :put_log "%%F"
        call :put_cmd "%%F"
    )
)
goto :eof

:change_bad_name
rem 不正文字の置換
set chg=!org!
set chg=!chg:/=■!
set chg=!chg:¥=■!
set chg=!chg:<=■!
set chg=!chg:>=■!
set chg=!chg::=■!
set chg=!chg:|=■!
set chg=!chg:*=■!
set chg=!chg:;=■!
set chg=!chg:?=■!
set chg=!chg:”=■!
goto :eof

:put_log
rem 検出したファイル名をログへ出力
set /a count_bad+=1
echo %date% %time% パス  : "%~1"    >> %logfile%
echo %date% %time% 変更前: !org! >> %logfile%
echo %date% %time% 変更後: !chg! >> %logfile%
goto :eof

:put_cmd
rem バッチファイル作成
echo ren "%~1" "!chg!"           >> %batfile%
goto :eof

:summary 
rem 検出結果をログに出力
set /a par=%count_bad%
rem set /a par *= 100.0
set /a par/=%count_all%
echo.                                       >> %logfile%
echo *** 検出結果 %date% %time% ***  >> %logfile%
echo.                                       >> %logfile%
echo 全ファイル数    : %count_all%          >> %logfile%
echo 対象ファイル数  : %count_bad%          >> %logfile%
echo 変更率          : %par% %%             >> %logfile%
goto :eof

バッチファイル( bad-char-changer.bat)では、実際にファイル名の変更をしない。ファイル名の変更が必要なファイルの一覧とバッチファイルを出力する。実行するとフォルダと同じ場所に下記のファイルが作成され、メモ帳でログファイルが表示される。

  • bad-char-changer.log  --- 不正文字を含むファイル名の一覧と件数。
  • change.bat --- ファイル名を変更するバッチファイル

bad-char-changer.logを読むとわかるが、最初にInternet Explorerの「お気に入り」フォルダを検出してから、SkyDriveの「お気に入り」フォルダを検出する。

たとえば、ログファイルの内容は、こんな感じ:

………

2012/07/19 22:50:11.13 パス  : C:\Users\Anonymous\SkyDrive\お気に入り\Links\スマートフォン:シャープ.url   
2012/07/19 22:50:11.13 変更前: スマートフォン:シャープ.url
2012/07/19 22:50:11.13 変更後: スマートフォン■シャープ.url
………

バッチファイルの内容はこんな感じ:

………

ren "C:\Users\Anonymous\SkyDrive\お気に入り\Links\スマートフォン:シャープ.url" "スマートフォン■シャープ.url"

………

これで問題なしと思ったら、change.batの内容を確認してから実行するとファイル名の不正な文字が「■」に置き換えられる。

(CP932以外の文字では正しく動作しません。たとえばハングルを含むファイル名とか…)

SkyDriveの詳しい動作は把握していないが、とりあえず、大丈夫だと思っている。結果については責任をもてないので自己責任でお願いします。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
驚いた

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
SkyDriveが急にファイル名に使用できない文字があるエラーになった ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる