2017-11-02 6 views
0

私はこのスクリプトを持って、私は現在のディレクトリ内のファイルをすべて削除したいと思いますが、私は一つのファイル(update.batを)を維持したい現在のディレクトリ内の1つのファイルを除くすべてのファイルを削除するにはどうすればよいですか?

for /r %%i in (*) do if not '%%~ni' == 'update.bat' del %%i 

それので、期待どおりに動作しませんすべてのファイルを削除するため、条件が考慮されていないようです。

スクリプトの問題は何ですか?

+0

拡張子のない名前。 cmdプロンプトを開き、 'FOR /? 'と打ち込んですべての修飾子が何をするのかを読んでください。バッチファイルが実行されているのを見ている場合、for変数がファイル名のみに展開されているのを確認できるはずです。また、 'FOR/R'がディレクトリツリーを歩きます。現在のディレクトリだけを望むなら '/ R'を削除してください。 – Squashman

+2

次のスクリプトの作成を検討しましたか? 'for/r %% i for(*)に対してecho '%%〜ni''を実行します。これはあなたのスクリプトが何をしているのかをあなたに教えてくれるでしょう:-) – Dominique

+0

あなたは他の言語の有能なプログラマーであるようですので、@ Dominiqueのアドバイスを受けて、あなたのようなバッチファイルを正しくデバッグすることを願ってくださいコマンドの出力を見て、使用していたコマンドのヘルプファイルを読んだら、あなた自身で問題を解決できたはずです。 – Squashman

答えて

1

ファイルがupdate.batと表示されている場合、%%〜niはupdateを返します。~nは名前だけを返しますが、拡張子は返しません。だから、update==update.batが偽であることを確認しています。さらに、パスにスペースが含まれていると、del %%iが問題を引き起こす可能性があります。また、必要のない場所は避けてください。

for /r %%i in (*) do if not '%%~nxi' == 'update.bat' del %%i 

しかし、このコードは、「クリーン」である:ただし、名前拡張子を取得すると、あなたのコードが動作する%%~nxi%%~niを置き換える 'N'修飾子はファイルなので

for /r %%i in (*) do if not "%%~nxi"=="update.bat" del "%%i" 
+0

ありがとうございました! それは素晴らしいです。 – roll

関連する問題