ファイル拡張子を保持する必要があり、サブフォルダーを処理する必要があります。
たとえば、「File.name.ext」は「File-name.ext」になります
私はシェルスクリプトに関して完全に無知であるため、応答で詳しく説明してください。どのスイッチが何を意味するのか、あるいはその問題のパスをどのように指定するのかさえ分かりません。
ファイル拡張子を保持する必要があり、サブフォルダーを処理する必要があります。
たとえば、「File.name.ext」は「File-name.ext」になります
私はシェルスクリプトに関して完全に無知であるため、応答で詳しく説明してください。どのスイッチが何を意味するのか、あるいはその問題のパスをどのように指定するのかさえ分かりません。
回答:
私は実際に他の答えに完全に同意します。GUIの一括名前変更ユーティリティは、非常に使いやすいでしょう。ただし、楽しみのために、現在のディレクトリ内のすべてのファイルの名前を再帰的に変更する必要がある次のバッチファイルを作成しました。およびサブディレクトリ。を置き換えます。-で(たとえば、「Long .file。.name.ext」は「Long -file- -name.ext」になります):
@echo off
setlocal enabledelayedexpansion
for /r %%f in (*.*) do (
set fn=%%~nf
REM Remove the echo from the following line to perform the actual renaming!
if not [!fn!]==[] if not ["%%~nxf"]==["!fn:.=-!%%~xf"] echo ren "%%~f" "!fn:.=-!%%~xf"
)
pause
バッチファイルを1回実行し、出力が満足できるものである場合は、単語echo
(最初の行ではなく2番目のインスタンス)を削除してファイルを再実行することにより、実際の名前変更を実行します。
.htaccess
どうしてバッチファイルに悩まされるのか、どういうわけか理解できません。次のような膨大な数のGUI名前変更ツールのいずれかを使用してみませんか。
http://www.beroux.com/english/softwares/renameit/
その特定のものがあなたのボートを浮かせない場合、このパレードをチェックしてください:
http://www.techsupportalert.com/best-free-rename-utility.htm
これが、最終的なテスト済みのバッチファイルのバージョンです。ファイル名または拡張子のあるファイルとないファイルで動作しますが、ファイル名に拡張子を含むファイル%
またはファイルは問題!
を引き起こします。
遅延拡張を使用するため、遅延拡張をオンにしてコマンドプロンプトから実行する必要があります(単純に実行してsetlocal /enabledelayedexpansion
もカットされません。既に有効になっている場合のみトグルするためです。コマンドが有効になっていない場合は無効です)プロンプトが実行されます)。
/V:ON
スイッチでコマンドプロンプトを開くことで遅延拡張をオンにできますが、次のバッチファイルのように既存のコマンドプロンプトからもオンにすることができます。
@echo off
:: This batch file (prints the command to) rename files so that
:: any dots (.) are replaced with dashes (-)
::
:: Note, files with names containing percents (%) and exclamantions (!)
:: will intefere with command-prompt syntax and are not supported, but
:: can be worked around: https://stackoverflow.com/questions/5226793/
:: If this batch-file has no parameters...
if [%1]==[] (
:: Open a new command-prompt with delayed-expansion enabled and call self
cmd /v:on /c "%0" +
:: Quit
goto :eof
)
:: Recurse through all files in all subdirectories
for /r %%i in (*) do (
rem (:: cannot be used for comments in a FOR loop)
rem Check if it has an extension
if [%%~xi]==[] (
rem If it has an extension, preserve it
set RENFN=%%~nxi
) else (
rem Copy the path (and filename)
set RENFN=%%~ni
rem Check if it has a filename
if not [%%~ni]==[] (
rem If it has a filename, replace dots with dashes
set RENFN=!RENFN:.=-!
)
)
rem Rename original file
ren "%%i" "!RENFN!%%~xi"
)
:: Exit spawned shell (no need to use setlocal to wipe out the envvar)
exit
:: Test output:
::
:: C:\t> dir /b/a
::
:: .txt
:: blah
:: file.blah.txt
:: foo.bar.txt
:: super duper. .blah.ttt. omergerd.---.mp4
:: t.bat
::
:: C:\t> t.bat
::
:: ren "C:\t\.txt" ".txt"
:: ren "C:\t\blah" "blah"
:: ren "C:\t\file.blah.txt" "file-blah.txt"
:: ren "C:\t\foo.bar.txt" "foo-bar.txt"
:: ren "C:\t\super duper. .blah.ttt. omergerd.---.mp4" "super duper- -blah-ttt- omergerd----.mp4"
:: ren "C:\t\t.bat" "t.bat"
echo
コマンドのために名前を変更していません。echo
実際に変更を加えずに結果を確認するためにバッチファイルを作成するときは、常にコマンドの前で使用します。そうすれば、問題なくバッチファイルをテストおよび開発できます。どうやらカランも同じことをしているようです。echos
。を削除しました。