ファイル名に記号が含まれるか判定する(ファイルのドロップ)
ツイッター検索でみつけたツイート
@yrntrlmnmnt: 【挑戦者求む】「記号入りファイル名!@#$%^&()_+~-=`{}[]'.txt」(@は半角に読み替え)という名前のファイルをドロップして、ファイル名に記号があることを判定できるバッチファイルは存在するか?
普通に"%~nx1"で取り出そうとしたらうまくいかなかった。
イコール "=" が引数の区切りとして扱われてしまうみたい。しかもファイルをドロップしたときだけうまくいかないという不思議な挙動。
そこで "%*" をつかって、for /f "delims=" %%F で取り出したあと、%%~nxF を使う方法にしてみたらうまくファイル名だけ取り出せた。
あとは、findstr で検索すればなんとかなるはず。という感じでつくったのがこれ。
echo off for /f "delims=" %%F in ('echo %*') do echo "%%~nxF">$$tmp.txt :pause findstr /R "[-!@#$%^&()_+~=`{}[\]']" $$tmp.txt if errorlevel 1 goto notfound echo 記号がありました goto end :notfound echo 記号はありませんでした :end pause del $$tmp.txt
一通り試してみたけど、うまく動いているかな?
※ドロップするファイルのパスによる変化に対応するよう一部修正しました。