「。」を「-」に置き換えるバッチファイル


0

ファイル拡張子を保持する必要があり、サブフォルダーを処理する必要があります。

たとえば、「File.name.ext」は「File-name.ext」になります

私はシェルスクリプトに関して完全に無知であるため、応答で詳しく説明してください。どのスイッチが何を意味するのか、あるいはその問題のパスをどのように指定するのかさえ分かりません。


2
「File name.ext」を「File name-ext」にしたい(つまり、ファイルには拡張子が付いていない)のですか?または、「File.name.ext」のような「File-name.ext」になるファイルがありますか?
カラン

そこにいくつかの良い答えがここにありますが、も参照してくださいtechsupportalert.com/best-free-rename-utility.htm この種のものを行うために設計されていIFOR(無料)アプリケーションを
Mawg

私は、「ファイルNAME.EXT」になるべき「File.name.ext」持って@Karan
ブランドンオーグル

回答:


1

私は実際に他の答えに完全に同意します。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
-Synetech

@Synetech:そのようなファイル(空のファイル名、拡張子のみ)はスキップする必要があるため、追加のif条件を追加しました。これで動作するはずです、キャッチをありがとう!
カラン

以下のコードのように、これは機能していないようです。これを単純にメモ帳にコピーしてバッチファイルとして保存し、それを親ディレクトリにスローしています。実行中にコマンドプロンプトを見ると、名前が変更されていないようです。また、ウィンドウには、実行後に閉じて、私は最後の出力ウィンドウを取得いけない
ブランドンオーグル

コマンドプロンプトではなく、エクスプローラーからバッチファイルを直接実行しているため、実行後にウィンドウが閉じます。必要に応じて、ウィンドウを開いたままにするために最後に一時停止を示す行を追加するか(実際には上記で追加しただけです)、ディレクトリに変更した後にコマンドプロンプトからバッチファイルを実行します。また、安全のため、デフォルトで名前の変更を無効にしています。上記の答えで言及しましたが、出力が満足できるものであればrenの前のエコーを削除し、再度実行して実際の名前変更を行います。
カラン

1
ところで、Synetechは上記の一括名前変更コマンドについて言及しました。ReNamerを使用して、シンプルなGUIを使用して複雑な名前変更ルールやスクリプトを設定し、コマンドラインから保存済みのプリセットを呼び出すこともできます。
カラン

0

どうしてバッチファイルに悩まされるのか、どういうわけか理解できません。次のような膨大な数のGUI名前変更ツールのいずれかを使用してみませんか。

http://www.beroux.com/english/softwares/renameit/

その特定のものがあなたのボートを浮かせない場合、このパレードをチェックしてください:

http://www.techsupportalert.com/best-free-rename-utility.htm


私は毎日何千もの銘柄銘柄をダウンロードし、異なるクラスシェアを期間でフォーマットするアプリケーションを持っています。ただし、別のアプリケーションを使用して取引戦略を開発しており、ファイル名のピリオドと互換性がありません。データダウンローダーを設定して、完了時にバッチスクリプトを実行し、ファイルの命名エラーを修正できます。したがって、作業スクリプトを取得するために最初に時間をかけると、タスクを達成するために毎日GUIアプリケーションを使用する時間を節約できます。
ブランドンオグル

OK、コメントの半分で、なぜバッチが必要なのかわかりました。:-)理想的な方法は、自動化された方法またはスケジュール可能な方法を要求することだったと思います。バッチで行う必要はありません。あらゆる種類の言語またはSynetecが話していたコマンドラインツールを使用できます。しかし、私はあなたが複数の実行可能な答えを得たと思うので、すべては良いです。:
TheUser1024

0

これが、最終的なテスト済みのバッチファイルのバージョンです。ファイル名または拡張子のあるファイルとないファイルで動作しますが、ファイル名に拡張子を含むファイル%またはファイルは問題!引き起こします。

遅延拡張を使用するため、遅延拡張をオンにしてコマンドプロンプトから実行する必要があります(単純に実行して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。を削除しました。
Synetech

サイドノートとして、バッチプログラミングに慣れていない場合、なぜそれを使用して名前を変更するのですか?なぜGUIプログラムを使用しないのですか?WildRenameは、強力でありながら使いやすく、しかも無料であるため、お勧めします。
Synetech

私は毎日何千もの銘柄銘柄をダウンロードし、異なるクラスシェアを期間でフォーマットするアプリケーションを持っています。ただし、別のアプリケーションを使用して取引戦略を開発しており、ファイル名のピリオドと互換性がありません。データダウンローダーを設定して、完了時にバッチスクリプトを実行し、ファイルの命名エラーを修正できます。したがって、作業スクリプトを取得するために最初に時間をかけると、タスクを達成するために毎日GUIアプリケーションを使用する時間を節約できます。
ブランドンオグル

1
ああ、それは理にかなっています。そうです、自動化されたソリューションのスクリプト作成は適切です(ただし、Bulk Rename Commandなどのコマンドラインから実行できる高度な名前変更ユーティリティがあるはずです)。
Synetech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.