• ベストアンサー

バッチファイルで抽出

現在ネットワーク越しにファイルを取得しています。 ですが、1ファイル20MBぐらいあり一時的にネットワークの負荷がかかるため、csvファイルを加工し必要な箇所だけを抽出しようと思っています。下記作業がバッチで出来るのか教えて下さい。 1.csvファイルの中身を加工 2.加工したファイル名を作業日にする 3.加工したファイルを取得する(コピー)

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

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.3

単純にバッチファイルに許されている機能のみでという意味では不可能です。 1.ファイルサーバ側に何らかのRSHサーバかSSHサーバを立てる。 2.WSHを使ってリモートで動かせるバッチジョブを記述する。 3.RSH相当の機能を持つサービスプログラムを開発する。 恐らく、この要件で一番使われている手法は1.です。 調べれば、結構ネットでも情報が集まります。 SFUやCygwinを使うもよし、Win32の独自RSHサーバ(数は非常に少ないですが)を使うもよしです。 2.は、外部のツールを使わなくても済みますが、OSによって許されていることが違っていたり、セキュリティ関連のポリシーをいろいろ変更しないと(つまりレジストリをいじる)リモートからの操作はできない等、スクリプトを書くよりも環境構築でまず敷居が高いでしょう。また、この場合処理部分は、VBScriptやJScriptで記述する必要があるため、そちらのスキルも必要になります。 まあ、コード自体は単純なもので済みますが。 3.は普通は考えませんね。 サービスとソケットプログラミングの勉強がしたいならいいかもしれませんが。 以上 ご参考までに。

その他の回答 (2)

  • you-m
  • ベストアンサー率58% (190/327)
回答No.2

この質問が、いわゆるネットワークドライブにあるファイルを、自分のPCから操作したバッチファイルで操作するという話であれば、残念ながらこのアプローチでは問題の解決になっていません。 これは、ネットワークの先にあるデータを加工・抽出するという処理に対して、結局はすべてのデータをこちら側に読み込む必要があるからです。 むしろ、ネットワークの負荷という意味では増えることになります。 質問者さんのやろうとしていることを、単純にフローにすると以下のようになります。 1.バッチが起動される。 2.加工処理のコマンド(sedでも、for文でもなんでもいいですが)が、リモートのファイルを読み込み、加工処理を行う。このときすでにデータは全てネットワークを渡って届いている。 3.加工した結果が、ファイル名を変えてリモートへ書き込まれる。 4.リモートから、ローカルへコピーする。 まあ、2の出力先を、ローカルにすれば余計な負荷は減りますが、それでもネットワーク側からみれば、単純コピーとほぼ同じだけのデータが流れていることになります。 あらゆるプログラムは、例外なく実際に処理するために自分のメモリ上にデータが存在しなければなりません。ゆえに、ローカルマシン上で加工処理を行った場合、結果には出てこなくても、全てのデータは一旦ローカルのマシンのメモリ上に転送されているということです。単にディスク上に保管されていないというだけです。 この場合、本当にネットワークに流れるデータ量を減らしたいのであれば、ネットワーク越しに何とかするのではなく、データを置いてあるマシン上で、データの圧縮なり、加工なりを行う必要があります。

SUPERH2O
質問者

補足

サーバー上にバッチファイルを用意し、ローカル側のバッチでサーバー上のバッチを動かす事は可能でしょうか?

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.1

CSVの加工については、SEDで対応できる範囲ならばなんとかなるでしょうが、恐らくはperlなどで簡単なプログラムを作る必要があると思います。また、質問からすると、加工する内容も作業日によって異なるような気がしますが、どうでしょう。 なお、以下は、ファイル名を日付.csvにしてコピーするバッチの一例です(win2000/XPのみ)、日付はyyyymmdd(20050815)の形式になります。形式を変えたければ、一行目の最後の部分、DATES=の中をいじってください、%%aが年、%%bが月、%%cが日付です。 for /F "tokens=1-3 delims=/ " %%a in ('date /t') do set DATES=%%a%%b%%c ren file.csv %DATES%.csv copy %DATES%.csv C:\ (コピー先)

関連するQ&A

  • バッチファイルについて

    ファイルの中身を抽出するバッチを作成しました。 そのバッチファイルを実行し、test.csvというファイル名をつけて出力できたんですが、出力パスも指定することは可能なんでしょうか? find.bat > test.csv

  • バッチファイルで出来る事

    バッチファイルでcsvファイルの加工(列の削除、オートフィル等)は できるのでしょうか? バッチファイル作成の初心者ですので、お手柔らかに。

  • バッチファイル作成方法

    バッチファイルを作成してファイルの結合(csvファイル)を行おうとしています。 ですが下記のような状況になってしまいどうにかならないかと思っています。 ***1.csv ***2.csv ***3.csv ***1.csv というような順番でデータがフォルダに転送されきてしまいます。 「1,2,3」までならば結合のバッチファイル作成が可能なのですが、 「1,2,3」の後に再度「1」のファイルが同フォルダにきた時には どのような文にすればイイのかお教え頂けますでしょうか。 下記に結合の文を記させて頂きます。 copy ***1.CSV+***2.CSV+***3.CSV+***_ADDALL.CSV d:\***\***_ALL.CSV 初めてバッチファイルというものを作成するので不明な点が多いのですが、宜しくお願い致します。

  • ファイル移行用のバッチ

    ファイルサーバが老朽化した為、現行サーバから新サーバへのファイルを移行することになりました。 ただ、ネットワークを占有することができないのと、ファイル数が多いので自動でコピーを考えています。 なんとなく以下のような仕組みのバッチを作ろうと思っていますが、バッチを作成したことがないのでアドバイスいただければと思っています。 (1)コピーする対象のリストを作成 (2)リストを読み込み、10ファイルを現行サーバから新サーバへコピー (3)ファイルのコピー後、30秒ほど処理を一時停止 (4)上記(2)~(3)を繰り返し全てのファイルをコピー

  • ネットワークIOを監視するバッチファイルを作成したい

    ネットワークIOが高負荷になったときにメッセージを出力するようなバッチファイルを書きたいのですが、 ネットワークIOを数値で取得するようなコマンドというか方法ってありますか? WindowsXPproSP2です。

  • バッチファイルについて

    pcのOSは全てwindows98です。 PCが上司機1台、社員機20台あるとします。ピアツーピアでネットワーク化しています。各社員機20台はCドライブの「Mydocument」フォルダと「データ」フォルダが共有されています。必要な時に上司機からネットワークアイコンを開いて各社員機の共有されている2つのフォルダの中を消したりしています。ここで質問します。 そこで上司機からバッチファイルで一度に「Mydocument」フォルダと「データ」フォルダの中身を消すということをしたいのです。ちなみに「Mydocument」は中のデータを全て消すのではなく必要なものもあるので、「Mydocument」を別のフォルダ(C\バックアップフォルダ)にコピーしていて、そのコピー先の「C\バックアップフォルダ\ Mydocument」をCドライブにコピーして置き換えるという風なバッチファイルを作りたいです。以上のようなバッチファイルはどんな文になりますか?本当はバッチファイルを勉強したらよいのですが、どうしてもすぐに作りたいのでどんな文になるのか実際に作った文を見せてください。お願いします。

  • バッチファイルについて質問させて下さい。

    下記のようなcsvファイルまたはテキストファイルに纏めた移行元パス、移行先パスの情報をfor /fで行毎に参照しコピー処理を行うバッチファイルを作成したいと考えているのですが頓挫しております。 出来るだけバッチファイルで実現したいのですが可能でしょうか。お手数ですがご教示下さい。 (コマンドはxcopyを想定しています。) ------file.csv---------- 移行元パス1,移行先パス1 移行元パス2,移行先パス2 ・        ・ ・        ・ ---------------------- for /f "delims=,"%%a in (file.csv) do xcopy %%a 上記では移行先が指定できないので動きませんでした。

  • DOSバッチのコピーについて

    フォルダ内の複数ファイルを、別フォルダにコピーするバッチを作りたいと考えています。 具体的には、コピー元ファイルは、オリジナルファイル名+日付.CSVの法則で、100ファイル程度が毎日コピー元フォルダに出力されます。 コピーしたいファイルは、その都度、日付単位で変わるので、バッチ実行時に任意のコピーしたい日付を指定(入力)して、別フォルダに コピーさせたいのですが、何か方法ありますでしょうか? 尚、昔の馴染みがあり、理解しやすいので、DOSのバッチで実現できないでしょうか? 例 sample1_20081124.CSV sample2_20081124.CSV sample1_20081125.CSV sample2_20081125.CSV sample1_20081126.CSV sample2_20081126.CSV ↓ 20081125のファイルだけコピーする sample1_20081125.CSV sample2_20081125.CSV 宜しくお願い致します。

  • バッチでファイルのコピーを行いたい

    バッチを利用してファイルのコピーを実施しようとしておりまあす あるフォルダ内にあるファイルをすべて別のフォルダに移動したいのですが、 このとき、 ・コピー対象のファイルは、MAXで11ファイル(cpfile1.csv-cpfile11.csv)ですが、すべて存在するとは限らない ・コピーに失敗したファイルは、あと2回コピーのリトライをする (MAX3回コピーを実施する) ・途中でコピーが失敗したファイルがあったとしても、フォルダ内のすべてのファイルに対してコピーを行う copy /Y c:A\cp_from\*.csv c:A\cp_to\*.csv で行おうとしたのですがこの場合、2回のリトライを行う方法が不明でした for文を利用して行うべきなのでしょうか? またその時にはどのように書けばよいのでしょうか> お分かりになられる方がおりましたら、ご教授お願いいたします

  • バッチ処理でCSVファイルコピーした後の記号削除方法

    こんにちは。バッチ処理作成初心者です。 Windows XP、エクセル2000 を使用しています。 複数のcsvファイルをバッチ処理(下記)でコピーしました。 copy /y aaa.csv+bbb.csv ccc.csv (結合させるcsvファイルは最大6つありますが、 上記コマンドでは2つのcsvファイルを結合させてます。) コピーしたcsvファイル「ccc」を開くと、必ず最終行A列に "・"という記号が現れます。 この記号を、「ccc」を開かずに削除する方法 もしくは、csvファイルをコピーしても記号が現れない方法を 教えてください。 (「ccc」は行数が最大で18万行を超えるため、いつも ファイルを開いて記号を削除することができません。)

専門家に質問してみよう