質問: ランダムな英数字でファイル名を変更 ランダムな英数字の名前で一連の画像(すべて.jpg拡張子付き)の名前を変更したいと考えています。例は08kdrh1s.jpgまたは0fwzuc3.jpgです。いくつか検索を行ったところ、$randomを使用したバッチスクリプトがいくつか見つかりましたが、それは0〜32767の値のみです。ユーザーが、ランダムな8文字の英数字の文字列を生成するバッチスクリプトを教えてくれました。コマンドラインに名前を出力するだけでファイルの名前を変更するためにこれを微調整するのは難しいでしょうか?@echo off setlocal enabledelayedexpansion set _rndlength=8 set _alphanumeric=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 set _str=%_alphanumeric%987654321 :_lenloop if not "%_str:~18%"=="" set _str=%_str:~9%& set /a _len+=9& goto :_lenloop set _tmp=%_str:~9,1% set /a _len=_len+_tmp set _count=0 set _rndalphanum= :_loop set /a _count+=1 set _rnd=%random% set /a _rnd=_rnd%%%_len% set _rndalphanum=!_rndalphanum!!_alphanumeric:~%_rnd%,1! if !_count! lss %_rndlength% goto _loop echo random string is !_rndalphanum!
回答: @echo off rem the length of the random file name. set _rndlength=8 rem alphanumeric characters from which to choose. set _alphanumeric=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 set _str=%_alphanumeric%987654321 rem define the folder to be searched. this value will be used later rem to build the full path to the file. this is necessary because we rem are not using /s with the dir command. set folder=c:\users\patrick.seymour\pictures rem loop through all of the jpegs in the specified folder. for /f "tokens=*" %%a in ('dir /b "%folder%\*.jpg"') do ( set result= setlocal enabledelayedexpansion call :getrandomname echo renaming "%folder%\%%a" to "!result!.jpg" ren "%folder%\%%a" "!result!.jpg" endlocal ) goto :eof :getrandomname set /a _len=0 :_lenloop if not "%_str:~18%"=="" set _str=%_str:~9%& set /a _len+=9& goto :_lenloop set _tmp=%_str:~9,1% set /a _len=_len+_tmp set _count=0 set _rndalphanum= :_loop set /a _count+=1 set _rnd=%random% set /a _rnd=_rnd%%%_len% set _rndalphanum=!_rndalphanum!!_alphanumeric:~%_rnd%,1! if !_count! lss %_rndlength% goto _loop rem echo random string is !_rndalphanum! set result=!_rndalphanum! goto :eof rem exit /b :eof