- ベストアンサー
バッチ処理 特定ファイルを除く削除
環境:XP pro SP3 「test.txt」を基本ファイルとして残しておき、 変数を使って「test20090401.txt」というように、 バッチ処理をした日付が名前に入るように毎日自動コピー を作成しまして、加えて、8日目以降 1週間前の ファイルを自動削除したいのですが、基本の「test.txt」 は残しておきたいのです。 以下の処理だと「test.txt」まで削除されてしまうのですが、 他フォルダへの移動退避以外に「test.txt」を残し、 1週間前のファイルを削除する方法をご教授頂きたく お願い致します。 set yyyymmdd=%date:~-10% set yyyymmdd=%yyyymmdd:/=% set LOG_COUNT_LIMIT=7 cd c:\temp copy test.txt test%yyyymmdd%.txt for /f "skip=%LOG_COUNT_LIMIT%" %%a in ('dir /b /o-n *.txt') do (del %%a)
- akune69
- お礼率93% (14/15)
- その他(Windows)
- 回答数2
- ありがとう数6
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私はファイル名に日時は必要ないので次の単純なやり方で7世代古いのを残しています。(バックアップなので日時は必要なときにファイル詳細を見れば解る) del c:\temp\text07.txt rename c:\temp\text06.txt text07.txt rename c:\temp\text05.txt text06.txt rename c:\temp\text04.txt text05.txt rename c:\temp\text03.txt text04.txt rename c:\temp\text02.txt text03.txt rename c:\temp\text01.txt text02.txt copy c:\temp\text.txt text01.txt 回答ではないのですがこの質問でファイル名に日時を入れるやり方もあるのかと参考になりましたので書きました。
その他の回答 (1)
- pita-gora
- ベストアンサー率70% (102/145)
test.txt の分1ファイル増えているので、set LOG_CONUT_LIMIT=8 とすればいいのでは? 削除する数を現行と変えたくないのなら、 set yyyymmdd=%date:~-10% set yyyymmdd=%yyyymmdd:/=% set LOG_COUNT_LIMIT=7 cd c:\temp copy test.txt test%yyyymmdd%.txt ren test.txt test.$$$ for /f "skip=%LOG_COUNT_LIMIT%" %%a in ('dir /b /o-n *.txt') do (del %%a) ren test.$$$ test.txt 上記のように、一時的にtest.txtをリネームすればいいでしょう。
お礼
ありがとうございます。 リネームとは思いつきませんでした。 明日、会社で検証してみます。
関連するQ&A
- バッチファイルで定期的にファイル削除を行う方法
windows2003サーバーでテキストファイルにプログラムの処理結果を記述させています。 そのログファイルを1日に1回削除するバッチファイルを作成しようと考えています。 以下のような動きをするようにするにはどのように記述したら良いのでしょうか。(ログファイルの名前をlog.txtとします。) 1,log.txtを削除 2,0キロバイトのlog.txtを作成 「log.txtを削除」はdelコマンドでできますが、「0キロバイトのlog.txtを作成」でファイル新規作成のコマンドがわかりません。 もし分かる方がいましたら教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- MS-DOSでのファイル/フォルダ一括削除
以下のようなフォルダ、ファイルがあるとし、LOGDIR下にある「200803」の文字列を 含まないファイル及びフォルダをDOSコマンド(Win2003)で削除(できれば一括で) する方法を模索しています。 Cドライブ | | +LOGDIR | +---LOG20080228_084539 <--- 削除対象ディレクトリ | | | +-------log1.txt | | | +-------log2.txt +---LOG20080229_101553 <--- 削除対象ディレクトリ | | | +-------log1.txt | | | +-------log2.txt +---LOG20080301_132059 <--- 削除対象ディレクトリでない | | | +-------log1.txt | | | +-------log2.txt +---LOG20080302_185945 <--- 削除対象ディレクトリでない | | | +-------log1.txt | | | +-------log2.txt | |-----test20080229_085523.txt <--- 削除対象ファイル | |-----test20080229_092310.txt <--- 削除対象ファイル | |-----test20080301_153859.txt <--- 削除対象ファイルでない | 方法をご存知の方、いらっしゃいませんか?
- ベストアンサー
- その他(プログラミング・開発)
- バッチコマンドでファイル名の一部を参照して削除
Windows7を使用しています。 バッチコマンドで、C:\新規フォルダ\LOGに作成された“LOG_YYYYMMDD”と言うテキストファイルを30日前を残して全て削除したいと思っています。 その他ファイルやフォルダが混在する可能性があるので”LOG_”がついたフォルダを対象として削除したいのですが、どのようにすれば良いでしょうか? パターンを考えてみましたが、どちらも足りない部分があるようで上手くいきません。 (1)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do if "%%D" LSS "%ANS%" del /s /q %%D ※(1)のifの"%%D"のままではダメなのは分かるのですが、どのようにしたら良いのか困っています。 (2)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do ( set DELDATE=%%D if "%DELDATE%" LSS "%ANS%" del /s DELDATE ) 簡単な解説もいただけると助かります。 宜しくお願いします。
- 締切済み
- その他(プログラミング・開発)
- ファイル移動処理(コマンドプロンプト batファイル)
ファイル移動処理(コマンドプロンプト batファイル) .batファイルでファイル名に日付がついたファイル(例:yyyymmdd_test.txt)の最新日付から2世代前のファイルまでをディレクトリに移動するような処理を記述したいのですが、やり方がわかりません。 例) 20100924_test.txt →移動対象外 20100925_test.txt →移動対象外 20100926_test.txt →移動対象 20100927_test.txt →移動対象 20100928_test.txt →移動対象 今、この下記の様に記述をしていますが意図した処理になりません。 どなたか助言を頂けないでしょうか? -------------------------------------------------------- mkdir temp set num=0 for %%f in (????????_test.txt) do ( set /a num+=1 if %num%==1 move %f% \temp\%f if %num%==2 move %f% \temp\%f if %num%==3 move %f% \temp\%f )
- 締切済み
- その他(プログラミング・開発)
- バッチ処理でファイルの削除
よろしく願いします。 特定のフォルダ内にあるファイル(pdf)を自動で削除するバッチを作りたいと思っています。 ファイルは20090507161506900.pdfみたいに頭に年月日が入っています。 削除条件として、30日前のものだけ削除したいです。 実行は、Windowsのタスク処理でやろうとしています。 どうかよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- ファイル世代管理バックアップ、バッチ
set _bkupFolder=\\01\Users\test\Old_TestData set _presentDate=%date:~-10,4%%date:~-5,2%%date:~-2,2% copy "\\01\Users\test\新規テキスト ドキュメント.txt" "%_bkupFolder%\%_presentDate%一覧.txt" for /f "skip=30" %%A in ('dir /b/o-d "%_bkupFolder%\*.txt"') do @del /q %%A というロジックで世代管理バックアップbatを作っています。 バックアップまではできるのですが、 世代管理がまったく動いてくれません。 \\01\Users\test\Old_TestData フォルダ内にあるtxtファイルが30を超えた分だけ古い順に削除 という管理にしたいのですが。 どなたかご教授お願い致します。 ネットワーク上で動かしています。 現在フォルダ中のtxt=55ファイル 因みにコンソール上で動かすと for /f "skip=30" %A in ('dir /b/o-d "%_bkupFolder%\*.txt"') do @del /q %A ”○○がみつかりませんでした。” というメッセージが25行でます。(削除したい数と一致します。) つまりファイル名をどこかで認識して探しているということでしょうか? その後、ファイル名が悪いのかとファイル名を変更して実行したら ”指定されたファイルが見つかりませんでした。” といわれました。 ファイル名を指定するつもりはないのですが・・。どこでそうなってしまっているのでしょう? お分かりになるかた、予想が付く方、どうか宜しくお願いいたします。 ※OS WinXP です。
- 締切済み
- その他(プログラミング・開発)
- バッチファイル処理
バッチファイルの処理の処理速度についてどなたか教えてください。 ある同一のコマンドをよびだすのに、バッチファイル単体で実行する場合と、プログラムからCreateProcessで呼び出す場合の処理速度を比較したのですが、だいぶ異なります。 プログラムで呼び出したいのですが、処理速度が遅くて使いものにならないため、速度UPをしたいのですが、この違いはなにが原因でしょうか。 計測方法は以下です。 ●バッチファイル単体→バッチファイルの中で計測(1秒程度でおわる) ●プログラムからCreateProcessで呼び出し→WaitForSingleObjectでプロセスが終了するまでの時間を計測(10秒ぐらいかかる) それぞれのバッチファイルの中身は以下のとおりです。 (2つのVSSコマンドをコマンドラインから実行するものです) ●バッチファイル単体 ...省略 set time1=%TIME::=% set time1=%time1:~0,10% echo Start %time1% >> %fileLog% 2>&1 ss cp %project% -YAA,BB >> %fileLog% 2>&1 ss add %folder%\%fileAdd% -YAA,BB -I- >> %fileLog% 2>&1 set time2=%TIME::=% set time2=%time2:~0,10% echo End %time2% >> %fileLog% 2>&1 ●プログラムからCreateProcessで呼び出しているbatファイル ss cp $/test/ -YAA,BB ss add C:\Test\test.dat -YAA,BB -I- 2> C:\Temp\ErrorAdd.txt
- 締切済み
- その他(プログラミング・開発)
- バッチファイルのrdでログを吐きたい
現在rdコマンドを使い、失敗した場合、成功した場合どのフォルダを削除したか、等のログを吐きたいのですが、ログが吐けません ログの吐き方をご存知の方ご教授いただければと思います フォルダ構成 -log.txt -test -rd.bat rd.batを実行すると、testフォルダが削除され、log.txtに記述されます また、rd.batはtest2を削除しようとしますが、test2というフォルダは存在しないため、エラーをlog.txtに記述します rd.batの内容 @echo off rd test /S /Q >> log.txt rd test2 /S /Q >> log.txt この状態で実行しますと、log.txtは何も書き込まれないままです echoをつけて echo rd test /S /Q >> log.txt にするとrdが実行されません どなたかご存知の方ご教授よろしくお願いいたします
- ベストアンサー
- その他(プログラミング・開発)
- バッチファイルでの特殊文字列削除方法
バッチファイルでの特殊文字列削除についてです。 count.txt "2011/05/23 11:54 xxxxxxxxxxxxxxx" の一行のみ格納してあります。 最初と最後の””(ダブルクオート) のみ削除し上書き保存したいです。 できれば外部ソフトを使わずにバッチ処理で解決したいです。 いろいろ調べましたがうまく削除できないため 教えていただきたいと思います。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- バッチで特定のファイルを消す方法と日付の計算
いつもお世話になっております。 バッチの作成方法について教えてください。 tmpフォルダには日々ログファイルが作成されていきます。 ログファイルのファイル名はバラバラですが、必ず20140527のように yyyymmddの日付が入っています。 3日前のログはもう不要なので、削除したいのです。 (1)本日より3日前の計算はどのようにしたらよいでしょうか? (2)3日前の日付が入っているファイル名を削除するにはどのようにしたらよいでしょうか? 具体的にプログラムを書いて教えていただけないでしょうか。 お手数をおかけしますが、よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
お礼
ありがとうございます。 なるほど、至ってシンプルですね。 明日、早速、上長に提出したいと思います。