2017-08-17 12 views
0

バッチファイルを作成するときに、新しいバージョンが古いものに置き換えられないように、名前にバージョン番号を追加することを考えました。新しいバージョンでは、古いものをすべて削除したいので、例としてappsという名前のフォルダをとり、その中にTest (v1).batTest (v2).bat & Test (v3).batという名前のフォルダを作成できるようにします。私は何かがTest (v1).bat & Test (v2).batを削除する前にTest (v3).batが何をしたいのか、私はあなたがこの時点で考えるかもしれないものを知っている:実行された.batファイルと同じフォルダ内の.batファイルを削除するには(実行したファイルを削除せずに)?

なぜあなただ​​けの行(デル「テスト(V1).BATを追加しません")&(del" Test(v2).bat ")?しばらくした後、私はTest (v4).batを作り、それらが存在する場合、それは以前のすべてのバージョンを削除したいと言うことができますので、私が欲しいものではありません

。明らかに、もし私が常に&を追加しなければならない場合は、del "Test (v№).bat"を追加することを忘れないで、非常に最適化されないだろう。私がこのようなことをしたら、の場合、.batのファイルはすべて削除されます。また、私はそれは厳しいを持つに依存している

+0

とにかく古いものを削除しているのであれば、まず最初に上書きするのではなく、単に最新バージョンのTest.cmdに名前を付けて、以前のバージョンとして 'Test.bat'を保存してください。 – Compo

+0

私はいくつかの理由を見ることができます。古いバージョンはバックアップの目的でミラーリングされている可能性がありますが、一度使用されると最新のバージョンのみがシステムに保存されます。 –

答えて

0

古いバージョンが実行された場合(Test (v2).batが実行された場合Test (v3).batTest (v4).batなどを削除しますが、Test (v1).batを削除しない)それはそう、それは文句を言わない、新しいバージョンを削除したいです(このような前提は、多くのセキュリティやいたずら攻撃の中心にあるため、注意してください)。

このバッチファイルは、現在のバッチファイルがすでにあなたの質問に暗示されている命名標準に準拠していると仮定して書かれています。私はファイルが準拠していない場合に自殺騒ぎを避けるために、これに安全性をコードしていませんでした。あなたはそれを自分で行うことができます。 :-)

また、この場合のgoto ENDITは余分なものですが、追加するコードやサブルーチン、またはあなたが持っているものがある場合は、すべてのバッチファイルで行う安全なベストプラクティスです。 goto ENDITラベルと:ENDITラベルの両方を削除して、わずかなパフォーマンス向上を図ることができます。

echo deldelに変更すると、このことが予期しない方法であなたを殺さないことが確認されます。

@echo off 
set PUR_CURFNM= 
for /F "usebackq tokens=*" %%F in ('%0') do set PUR_CURFNM=%%~F 
for %%F in ("%PUR_CURFNM%") do set PUR_FULFNM=%%~dpnxF 
for %%F in ("%PUR_CURFNM%") do set PUR_BASBNM=%%~dpnF 
set PUR_BASFNM= 
for /F "tokens=1 delims=(" %%A in ("%PUR_BASBNM%") do set PUR_BASFNM=%%A 
for %%F in ("%PUR_BASFNM%(v*).bat") do if /I "%%F" NEQ "%PUR_FULFNM%" echo del "%%F" 

goto ENDIT 

:ENDIT 
set PUR_FULFNM= 
set PUR_CURFNM= 
set PUR_BASBNM= 
set PUR_BASFNM= 

私は@Compoと一緒ですが、これは奇妙な要求の一種です。それを楽しみましょう。 :-)

+0

私は要件をスキップしたことを知りました。より高いバージョン番号のファイルを削除したくないということです。これは 'FOR/F'、' SET'、 'SET/A'を使っていくつかの追加作業を行います。 –

関連する問題