• 締切済み

[コマンドプロンプト]世代管理+ログの圧縮

こんにちは、お世話になります。 現在コマンドプロンプトを用いて以下の動作を行うと考えております。 (1)数世代(3世代)のログを残して以前(4世代以前)のログはlhacaで圧縮します。 (2)古いログは削除します。(予定) 現在記述している内容は以下になります。 echo ******************************************************>>C:\testbat\result.log set LHACA_PATH="C:\Program Files\Lhaca\Lhaca.exe" echo %date%>>C:\testbat\result.log for /F "skip=3" %%F in ('dir /B C:\testbat\sample*') do echo %%F>>C:\testbat\result.log for /F "skip=3" %%F in ('%LHACA_PATH% C:\testbat\sample*') do echo %%F>>C:\testbat\result.log echo ******************************************************>>C:\testbat\result.log これでBATを実行すると「C:\testbat\sample*」内のファイルのひとつだけが圧縮されました。 スキップしたファイル以外を全て個別に圧縮するにはどうすればよいでしょうか? お手数をおかけし、申し訳ありませんがご教授をお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

for の仕様を確認してください. for /F "skip=3" %%F in ('%LHACA_PATH% C:\testbat\sample*') do echo %%F>>C:\testbat\result.log というのは, 結果的に「%LHACA_PATH% C:\testbat\sample* の出力結果の 4行目以降を C:\testbat\result.log に追加する」ことになっていませんか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

5行目は何を意図しているのですか? あと, lhaca の仕様がわからないのですが, コマンドラインにファイル名を並べたらそれらを全部圧縮してくれるものなのですか? もしそうだとしたら, 各ファイルがそれぞれ別のファイルに圧縮されるのですか? それとも, 全体を 1つのファイルにまとめるのですか? はたまた別の動作をするのですか?

Non201010
質問者

お礼

返信ありがとうございました。 五行目とは for /F "skip=3" %%F in ('%LHACA_PATH% C:\testbat\sample*') do echo %%F>>C:\testbat\result.log こちらのことであってますでしょうか? やろうとしている内容としては、ログファイルを3つスキップして、 4つ目から順次LHACAに送って圧縮しようとしております。 LHACAのコマンドを個別に '%LHACA_PATH% C:\testbat\sample1.log '%LHACA_PATH% C:\testbat\sample2.log '%LHACA_PATH% C:\testbat\sample3.log と記載したものを実行すると同じフォルダ内に圧縮ファイルが 生成されたのでFOR文で名前を切り替えて送れば圧縮できないかなぁっと考えました。

関連するQ&A

  • コマンドプロンプトでのフォルダ削除

    みなさん、お世話になっています。 さて、質問ですがバッチコマンドでファイルをフォルダごと 削除したいと思っています。 DELではフォルダの中にファイルが残っていると消せないし RMDIRでも、同じでした。 以下のコマンドで試してみました。 OSはXP Proです。 for /f "skip=5" %%f in ('dir /b /o-n') do RMDIR %%f 何か他に削除する方法がありますでしょうか。 よろしくお願いいたします。

  • FOR文のログファイル書き出し

    以前こちらで、for文を教えてもらいました。 同じディレクトリにある*.txtファイルの最後の行に、XXXXXを追記するというものです。 FOR %%F IN (*.txt) DO echo XXXXX >> %%F ここで同じディレクトリにある*.txtが、2000ファイル近くあるので、処理がされたかどうかをログファイルとして書き出したいのですが、FOR文を使ったリダイレクション(>>)は、どのようにやるのでしょうか? (当然ながら、FOR %%F IN (*.txt) DO echo XXXXX >> %%F >> log.txt などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。

  • コマンドの実行結果を変数に格納いしたい。

    有るプログラムへ特定ディレクトリのファイル数を渡す必要があり、バッチファイルを書いてますが、うまく行きません。 アドバイスを頂けましたら幸いです。 コマンドの実行欠課を変数に格納する方法を調べており、FOR文を使う事は分かったのですが、パイプを使った処理がうまく行きません。 ◎実行したいコマンド DIR /B | FIND /C /V "log” ◎バッチファイル @ECHO OFF for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i echo %RESULT% @ECHO ON パイプを使わず、単純なコマンドだと正常に変数に格納されますので、パイプでFINDに渡している事がだめだと思っております。 こういった場合、どう書けばよいかお教えください。

  • コマンドプロンプトでファイル読み込み

    For文を使って、パラメータファイルから値を読み込みたいのですが、 "C:\Documents and Settings\~"等(パスにスペースが含まれる場合)に置かれた場合、 ファイルを読み込んでくれず困っております。 ()内のファイル指定で、""(ダブルクォーテーション) や'(シングルクォーテーション)で囲むこともしてみましたが、ダメでした。。 どう指定すればよいのかご教授下さい。 よろしくお願いいたします。 【パラメータファイル(tmp.txt)】 ABC=12345 【バッチファイル(test.bat)】 for /F "delims== tokens=1,2" %%A in (D:\tmp.txt) do if %%A==ABC set value_1=%%B echo %value_1% pause

  • コマンドプロンプトのfor文の処理について

    以下のようなスクリプトを書き,拡張子を除いた文字列を抽出できているようなのですが, for文の中の ”echo”で出力することができません. 具体的には,入力として,「hoge01.txt」 を与え 「hoge01」 を抽出したいです. 出力結果として 「echoはONです」 とでます. for文の後のechoでは,「hoge01」と問題なく出力されます. これは何故なのかご教授していただけませんでしょうか? ------------------------------------------- for %%i in (*.txt) do (set/p c=%%~ni & echo %c%) echo %c% ------------------------------------------- for文の中だと,変数の指定方法等が異なるのでしょうか? 勉強不足で大変恐縮ですが,どうぞよろしくお願いいたします.

  • コマンドプロンプト 実行結果の桁をそろえたい

    バッチの実行結果の件数%count%を、5桁の右寄せ(結果が1桁のばあいは、スペース4桁を頭に入れてる)でテキストファイルresult.txt に出力したいのですが、下記のように書くと、 table1 : ("d\n",0) 件  と出力されてしまいます。 table1 :    0 件   と出力されるようにするにはどうしたらよいのでしょうか? for /f %%i in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=("%5d\n",%%i) echo table1 : %count% 件 >> "c:\bat\result.txt"

    • ベストアンサー
    • MySQL
  • コマンドプロンプト 全角を含んだ文字列の抽出

    ●ほしい文字列: C:\Program Files\全体\a b ●reg quaryの結果: ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\goo Dir REG_SZ C:\Program Files\本体\a b ●試したコマンド: for /f "skip=2 tokens=2*" %A in ('reg query %REGNAME% /v Dir') do echo %B ●結果:C:\Program Files\全体\a 全角を含んでいると以降のスペース以下が取得できないようなのですが 全角の有無にかかわらず取得できる方法はないでしょうか? 宜しくお願いいたします。

  • バッチファイルで2行にわたるコマンドを入力したいのですが

    バッチファイルで複数行にわたるコマンドを打ちたいのですが、方法がわからなくて困っています。 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" "test%hinichi%01.txt" "test%hinichi%02.txt" ・・・・・・・ と31個のファイルを圧縮するバッチです。 体裁の問題ですが、 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" ? "test%hinichi%01.txt" ? "test%hinichi%02.txt" ・・・ としたいのですが各行のつなぎの記号?がわかりません。 ご存知の方、よろしくお願いいたします。

  • コマンドプロンプト 複数の実行結果を変数に

    複数のテーブルのデータ件数を取得して変数に入れ、result.txtに結果を出力したいのですが、下のように書くと、1つのテーブルのデータ件数しか出力されません。複数の結果を出力するにはどうしたらよいか教えてください。 for /f %%z in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=%%z echo result: %count% >> "c:\bat\result.txt" test.sqlの中身を、 select count(*) from table1; select count(*) from table2; select count(*) from table3; とすると何も出力されず、 select count(*) from table1; とすると、1つの結果だけ出力されます。

    • ベストアンサー
    • MySQL
  • DOSのバッチ作成について‐FORのネストはできるんでしょうか?

    以下のようなバッチプログラムを作っています。 echo %date% %time% 開始しました。 rem レポートに関する環境変数 set rep01=01_A表 set rep02=02_B表 set rep03=03_C表 set rep04=04_D表 set rep05=05_E表 for %%d in (dora emon) do ( rem ディレクトリに関する環境変数 set OUT_PATH=d:\%%d\o_files set DOWN_PATH=d:\%%d\dl_files set PUB_PATH=d:\%%d\p_files set BAK_PATH=d:\%%d\b_files set LOG_PATH=d:\%%d\batch_log for %%z in (0001 0002 0003 0004 0005) do ( for %%r in (%rep01% %rep02% %rep03% %rep04% %rep05%) do ( if exist OUT_PATH\%%z\*.htm *.xls GOTO RESULT_01 else GOTO RESULT_02 :RESULT_01 echo ファイルが存在します。 :RESULT_02 echo %date% %time% %%z ファイルがありません。))) ここまでで、コマンドの構造が誤っています。 とエラーがでます。 FORのネストができないのかなって思ったりするのですが、初プログラムに挑戦中で、わかりません。 質問の仕方すらなっていないと承知していますが、 どうか、よろしくお願いします。

専門家に質問してみよう