• ベストアンサー

部分コピーについて

vbsで以下のことをするにはどうしたらいいでしょうか? log.txtからある部分のみコピーして別のファイルに出力したい。 例:log.txt コピー開始キーワード:start 終了キーワード:end 出力ファイル:new.log <log.txt> aaa addd start ddddd sssss end aaaaa ddddd <new.log> start ddddd sssss end のようにしたいんですけど、batでは無理なようなのでvbsで考えてます。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8561/19458)
回答No.2

vbsでやる場合は、基本、以下のようにします。 1.フラグ変数をクリアして0にする。 2.log.txtを読み込みモードでオープンする。 3.new.logを新規作成(既存の場合は上書き)モードでオープンする。 4.do whileでlog.txtがEOFじゃない間、以下を繰り返す  4-1.log.txtから1行読み込む  4-2.もしフラグ変数が0ならば   4-2-1.読んだ1行が「start」と一致したならば    4-2-1-1.フラグ変数を1にする   End If  End If  4-3.もしフラグ変数が0でないならば(4-2.と4-3.は、Else文で繋がないこと。動作が変わってしまう)   4-3-1.読んだ1行をnew.logに1行書き込む   4-3-2.読んだ1行が「end」と一致したならば    4-3-1.フラグ変数を0にする   End If  End If loop 5.log.txtを閉じる 6.new.logを閉じる なお、以下のように、startとendが「入れ子」になった場合 aaa addd start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend aaaaa ddddd sssss end ←外側のend aaaaa ddddd 上記のプログラムでは、結果は start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend になってしまう。 start ←外側のstart ddddd aaa addd start ←内側のstart ddddd sssss end ←内側のend aaaaa ddddd sssss end ←外側のend と言う結果を返したいなら 1.フラグ変数をクリアして0にする。 2.log.txtを読み込みモードでオープンする。 3.new.logを新規作成(既存の場合は上書き)モードでオープンする。 4.do whileでlog.txtがEOFじゃない間、以下を繰り返す  4-1.log.txtから1行読み込む  4-2.読んだ1行が「start」と一致したならば    4-2-1.フラグ変数に1を加算する(0ならば1に、1ならば2にする)  End If  4-3.もしフラグ変数が0でないならば   4-3-1.読んだ1行をnew.logに1行書き込む   4-3-2.読んだ1行が「end」と一致したならば    4-3-1.フラグ変数からを1を減算する(2ならば1に、1ならば0にする)   End If  End If loop 5.log.txtを閉じる 6.new.logを閉じる と言うプログラムにします。

devid
質問者

お礼

有難うございます。やってみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8561/19458)
回答No.1

>batでは無理なようなので フリーのコマンドライン版のsed.exeやawk.exeを使うと、batファイルの中で「この単語から、この単語までコピー」や「この行から、この行までコピー」ができますよ。 sed、awk、gawkで検索してみましょう。

devid
質問者

お礼

そうなんですか有難う御座います。 今回はvbsでやってみたいのですが、 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • echo と%ERRORLEVEL%の値について

    今日の日付から7日前の日付をテキストファイルに保存しようとし、下記のようにスクリプトを作成しました ago7.vbs --------------------------- dim ago7d ago7d = dateadd("d", -7, now()) WScript.Quit(year(ago7d) & right(100 + month(ago7d),2) & right(100 + day(ago7d),2)) --------------------------- main.bat --------------------------- cscript //nologo ago7.vbs echo %ERRORLEVEL%>D:\log.txt --------------------------- ago7.vbsで7日前の日付を取得し、main.batで受け取り、テキストファイルに出力しています。 こちらをコマンドプロンプトから直接「main.bat」を起動してやると正しく動作しますが、 (この場合のlog.txtは 20120903tが書き込まれて出力されています。) タスクスケジューラを使ってmain.batを実行すると、log.txtの新居陽は下記のようになってしまいます。 ECHO は <ON> です。 いろいろ試してみていますがうまくいきません。 どのようにすればlog.txtの内容が日付になるのでしょうか。

  • PowerShellからPowerShellを呼び出す方法

    PowerShellからPowerShellを呼び出す方法 次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。 下記のような非常に簡易的なバッチファイルがあるとします。 ■ aaa.bat ■ echo test ■ aaa.bat ■ ■ bbb.bat ■ aaa.bat > aaa.log ■ bbb.bat ■ ■ コマンドプロンプト ■ cmd> aaa.bat ・・・ 下に「test」と出力される test cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される ■ コマンドプロンプト ■ 同じ事をPowerShellでするとすれば ■ aaa.ps1 ■ echo "test" ■ aaa.ps1 ■ ■ PowerShellの画面から ■ PS > ./aaa.ps1 ・・・ 下に「test」と出力される test PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される ■ PowerShellの画面から ■ この時の「bbb.ps1」はどのようになりますか?

  • ログをコピーして移動させたいがうまくいかない

    ログをコピーし移動させたいのですがうまくいきません。 どなたか間違いがあったら教えてください。 タスクで時間になると起動させるつもりですが例えば「AAA200801.txt」と1月31日終わった時点で吐き出されたログを別フォルダへ「AAA.txt」と2月1日の何時かにリネームしてコピーしたものを移したいと考えています。 テストしているのですが移動しません(泣)どこか間違っていますか? @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 echo copy C:\test1\AAA%LASTMONTH% .txt C:\test2\AAA.txt また、四半期ごとに(例えば1~3月)出たログをまとめて「AAA200801.txt」を「AAA1.txt」、「AAA200802.txt」を「AAA2.txt」というようにまとめて変換して上記同様に別フォルダへリネームしてコピーしたいのですがどうしたらよいでしょうか?

  • サービスDosコマンドでのログ出力について

    Windowsのサービスの起動batの結果(正常に完了したかどうか)Cドライブに出力したいと考えております。 どのようにbatファイルを書き換えれば正常にログを取得できるのか、どなたかご教示頂けますとありがたいです。 起動.bat -------------------------------------- net start "servicename1" net start "servicename2" 起動.bat > c:\起動結果.txt pause -------------------------------------- 吐き出されたhenkou結果.txt -------------------------------------- C:\>net start servicename1 -------------------------------------- DOS画面(出力したいもの) -------------------------------------- C:\>net start "servicename1" サービス1は正常に起動しました。 C:\>net start "servicename1" サービス1は正常に起動しました。 C:\>henkou.bat 1>c:\henkou結果.txt -------------------------------------- という内容にログを出力できたらと考えております。 お分かりの方がいらしたら、ご教示いただけたら幸いです。

  • batファイルをアンダグラウンド実行した時の稼働確認

    batファイルをアンダグラウンド実行した時の稼働確認 os:windows xp aaaaa.batというバッチファイルをstartコマンドや、vbsなどからアンダーグラウンド実行した時、 aaaaa.batが稼働中かもう終了しているのかは、どうやって判断しますか? aaaaa.bat内になんらかのexeなどが動く時は、そのexeをタスクマネージャで捕捉できなくは無いですが、 dosコマンドベースで作成されたbatが、長時間、あるいはループした状態でバックグラウンド実行され、それを終了させる時などどうすれば良いですか?

  • 最新更新日のBATファイルコピーについて。

    最新更新日のBATファイルコピーについて。 どなたか教えてください。 BATを夜間スケジュール化して、あるファイルをコピーするBATを作成したいのです。 条件は (1)コピー元フォルダ C:TEST フォルダ以下に(2)~(4)のファイルがあります。 (2)コピー元ファイル名 AAABBB20101001.txt (3)コピー元ファイル名 AAABBB20101002.txt (4)コピー元ファイル名 AAABBB20101003.txt   **ファイル名の日付部分のみが可変です。 (5)コピー先 D:TESTBKK (6)コピー後ファイル名 AAABKK.txt (4)のみをコピーし(6)のファイルとして上書きコピーするbatを作成したいのです。 自分でも下記のbatを作成したみました。 @ECHO OFF SET LOGPATH=C:\test FORFILES /P %LOGPATH% /M AAA*.txt /C "cmd /c COPY /y C:\test D:\test\AAABKK.txt" /D 0 最新日付のみをコピーしたつもりが、すべてのファイルがAAABKK.txtに追加された 状態で出力されていました。どなたかアドバイスをお願いします。 他に違う作成方法があれば教えてください。

  • VBAでXCOPYの実行結果を取得したい

    VBAでshell関数を利用してXCOPYを実行し、テキストファイルにその実行結果を出力しています。 しかし、結果には D:\>xcopy D:\test\ssss.txt D:\test2 ファイルが見つかりません - ssss.txt 0 個のファイルをコピーしました もしくは D:\>xcopy D:\test\sssss.txt D:\test2 D:\test\sssss.txt 1 個のファイルをコピーしました というDOS画面で表示される内容が出力されているだけです。 ここでコピーに失敗している(0個のファイルをコピーしました)ファイル名だけを取得することは可能でしょうか? 色々サイトを検索してみましたが、答えが見つかりません。 恐れ入りますが、どなたかご存知の方がいらっしゃいましたらご教示ください。 よろしくお願いします。

  • ファイル中の数行を抜き出す処理について(シェル)

    ファイルaaa.txtの2行目から4行目を抜き出し、 ファイルbbb.txtに格納する方法として、 sed -n '2,4p' aaa.txt > bbb.txt がありますが、 変数を使用し、 start=2 end=4 sed -n '${start},${end}p' aaa.txt > bbb.txt とすると、エラーが発生します。 どうすればよろしいのでしょうか。

  • ファイルのコピーについて。(script)どなたか教えてください。

    ファイルをコピーしたいと思っております。 topディレクトリがAAAでその下のサブディレクトリとファイルがあり、それをBBBというディレクトリにそのままコピーしたいのですができません。ファイルを読み込むまではできたのですが、出力方法がわかりません。どなかか教えてください。 AAA/-- --/1A7/sam.txt --/2B3/sam.txt --/3C5/sam.txt コピー↓↓↓↓↓↓↓↓↓↓↓↓↓ BBB/-- --/1A7/sam.txt --/2B3/sam.txt --/3C5/sam.txt 途中までのsourceです import java.io.*; public class copyfile { public static void main(String[] args) { File file = new File("/AAA/"); File[] fileList = file.listFiles(); for(int i=0;i<fileList.length;i++){ System.out.println(fileList[i].getName()); } } }

  • 内容によって2つのファイルに分ける(shellscript)

    仕事で、ファイルの内容をチェックして別々のファイルに仕分けることが必要になりました。どのようにshellscriptを組めばよいでしょうか? fileの内容 (注:\tはタブを示す) aaa1 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa2 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa3 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa4 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa5 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa6 \t bbbb \t 15 \t cccc \t 15 \t sssss 60 \t .* \t 60を含むものは test_60.txtに集め 15 \t .* \t 15を含むものは test_15.txtに集めたいのです。 sed と 正規表現を使ってうまくいくのかと考えていますが、 前に進めません。 宜しくサジェスチョンをお願い致します。

このQ&Aのポイント
  • LAVIE15Nの新品を4月1日に購入しましたが、エッジで画像が壊れた表示になります。スマホ版が表示されている感じもします。接続方法や製品名・型番などは不明です。
  • 購入したLAVIE15Nのエッジで画像が壊れた表示になります。スマホ版が表示されている感じもします。接続方法や製品名・型番などの詳細は不明です。
  • LAVIE15Nを4月1日に購入しましたが、エッジで画像が壊れた表示になります。スマホ版が表示されている感じもします。詳細な接続方法や製品名・型番などは不明です。
回答を見る