2016-10-12 20 views
-1

ファイル名から特定の文字のみを削除するバッチファイルを作成するにはどうすればよいですか?スクリプトで行うことは可能ですか?私はこれらのシンボルを削除するために探しています:特定の文字を削除するバッチファイルの名前変更

({[}])+- 
+0

あなたが書かれているものの大半は、あなたが実際に何をしたいとは無関係です。私はあなたがワッフルを削除し、単に "* { - }の個々の文字を取り除いてファイルのグループの名前を一括して変更する方法を質問します。* – Clifford

答えて

0

M $の代替Powershellよりもはるかに強力で簡単に学べるスクリプト言語のRubyを紹介しましょう。 http://rubyinstaller.org/ 私はあなたに1行でコードを与えることができますが、ここでは明確にするために、必要なものを実行する4行のプログラムを示します。

Dir['c:/temp/*.package'].each do |file| 
    new_name = File.basename(file.gsub(/[({\[}\])+-]/, '')) 
    File.rename(file, new_name) 
end 

Dirコマンドは、スラッシュの代わりにバックスラッシュとUNIX表記で、内部のワイルドカードのパスを列挙し、各ファイルに対して、それはパスの(ファイル名のみ)をベース名を取り、使用してNEW_NAMEを生成し、私に説明してみましょう/ [] /内の文字を第2パラメータの ''(空文字列)に置き換える(gsub)正規表現。正規表現は、そのようなことのために行く方法です。詳細について知りたい場合は、Googleに十分な情報があります。 最後に、ファイル名を新しい名前に変更するために、ユーティリティクラスFile(はい、Rubyは完全にオブジェクト指向です)を使用します。

これは任意の言語で行うことができますが、私はRubyほど簡潔でわかりやすいとは言いません。 Rubyインタプリタをインストールし、これらの行をcleanup.rbに保存し、パスを自分のものに変更してruby cleanup、または拡張子が正しく関連付けられている場合はcleanupという名前で起動します。

これは

c:\temp\na({[}])+-me.package 

c:\temp\name.package 

し、ボーナスとして名前を変更します。ここでは、現在のフォルダ内に同じことを1つのラインバージョンを。

Dir['*'].each {|f| File.rename(f, File.basename(f.gsub(/[({\[}\])+-]/, '')))} 
0

、Windowsのcmd.exeのコマンドシェルのrenameコマンドを使用すると、必要なものを行うには、電源を欠いています。 PowerShell Rename-Itemコマンドを使用して、-Replace演算子を正規表現で使用することができます。

ただし、実行中のPowerShellスクリプトはセキュリティポリシーによって制限されているため、cmdバッチスクリプトとしてnot quite as straightforwardです。 Pythonなどのスクリプト言語は、それほど問題にはならないかもしれません。

+0

RubyはPythonよりも簡単なパスです。確かにあなたはバッチで経験がある場合 – peter

+0

@ピーター:かなり可能性があります;私は "そういう"としか言いませんでした - 私はどちらの言語も特によく分かりません - それは単なる例でした。私は個人的にはC++で行います。なぜなら、それが私が最もよく知っている言語であり、毎日使うのが速いからです。迅速な仕事のための最高の言語は、しばしばあなたがすでに知っている言語、またはタスクに最も適したものではなく、ツールをインストールした言語です。 – Clifford

+0

あなたはそうです。しかし、それはOPのケースでは再生されません、私が思うより簡単で理解しやすくなります。 – peter

0

出力

C:\Users\User>(
Set FName=test()[]{}+- 
Set FName=!Fname:(=! 
Set FName=!Fname:)=! 
Set FName=!Fname:{=! 
Set FName=!Fname:}=! 
Set FName=!Fname:[=! 
Set FName=!Fname:]=! 
Set FName=!Fname:+=! 
Set FName=!Fname:-=! 
Echo Ren test()[]{}+-.asc !Fname!.* 
) 
Ren test()[]{}+-.asc test.* 

バッチファイル

SetLocal EnableDelayedExpansion 
for %%A in (*.asc) Do (
Set FName=%%~nA 
Set FName=!Fname:^(=! 
Set FName=!Fname:^)=! 
Set FName=!Fname:{=! 
Set FName=!Fname:}=! 
Set FName=!Fname:[=! 
Set FName=!Fname:]=! 
Set FName=!Fname:+=! 
Set FName=!Fname:-=! 
Echo Ren %%A !Fname!.* 
) 
関連する問題