- ベストアンサー
バッチファイルで抽出
現在ネットワーク越しにファイルを取得しています。 ですが、1ファイル20MBぐらいあり一時的にネットワークの負荷がかかるため、csvファイルを加工し必要な箇所だけを抽出しようと思っています。下記作業がバッチで出来るのか教えて下さい。 1.csvファイルの中身を加工 2.加工したファイル名を作業日にする 3.加工したファイルを取得する(コピー)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単純にバッチファイルに許されている機能のみでという意味では不可能です。 1.ファイルサーバ側に何らかのRSHサーバかSSHサーバを立てる。 2.WSHを使ってリモートで動かせるバッチジョブを記述する。 3.RSH相当の機能を持つサービスプログラムを開発する。 恐らく、この要件で一番使われている手法は1.です。 調べれば、結構ネットでも情報が集まります。 SFUやCygwinを使うもよし、Win32の独自RSHサーバ(数は非常に少ないですが)を使うもよしです。 2.は、外部のツールを使わなくても済みますが、OSによって許されていることが違っていたり、セキュリティ関連のポリシーをいろいろ変更しないと(つまりレジストリをいじる)リモートからの操作はできない等、スクリプトを書くよりも環境構築でまず敷居が高いでしょう。また、この場合処理部分は、VBScriptやJScriptで記述する必要があるため、そちらのスキルも必要になります。 まあ、コード自体は単純なもので済みますが。 3.は普通は考えませんね。 サービスとソケットプログラミングの勉強がしたいならいいかもしれませんが。 以上 ご参考までに。
その他の回答 (2)
- you-m
- ベストアンサー率58% (190/327)
この質問が、いわゆるネットワークドライブにあるファイルを、自分のPCから操作したバッチファイルで操作するという話であれば、残念ながらこのアプローチでは問題の解決になっていません。 これは、ネットワークの先にあるデータを加工・抽出するという処理に対して、結局はすべてのデータをこちら側に読み込む必要があるからです。 むしろ、ネットワークの負荷という意味では増えることになります。 質問者さんのやろうとしていることを、単純にフローにすると以下のようになります。 1.バッチが起動される。 2.加工処理のコマンド(sedでも、for文でもなんでもいいですが)が、リモートのファイルを読み込み、加工処理を行う。このときすでにデータは全てネットワークを渡って届いている。 3.加工した結果が、ファイル名を変えてリモートへ書き込まれる。 4.リモートから、ローカルへコピーする。 まあ、2の出力先を、ローカルにすれば余計な負荷は減りますが、それでもネットワーク側からみれば、単純コピーとほぼ同じだけのデータが流れていることになります。 あらゆるプログラムは、例外なく実際に処理するために自分のメモリ上にデータが存在しなければなりません。ゆえに、ローカルマシン上で加工処理を行った場合、結果には出てこなくても、全てのデータは一旦ローカルのマシンのメモリ上に転送されているということです。単にディスク上に保管されていないというだけです。 この場合、本当にネットワークに流れるデータ量を減らしたいのであれば、ネットワーク越しに何とかするのではなく、データを置いてあるマシン上で、データの圧縮なり、加工なりを行う必要があります。
- ultraCS
- ベストアンサー率44% (3956/8947)
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:\ (コピー先)
補足
サーバー上にバッチファイルを用意し、ローカル側のバッチでサーバー上のバッチを動かす事は可能でしょうか?