依頼内容の紹介

ご依頼いただいた内容の紹介

 

ご依頼例の一覧

 

テキストファイル(.txt)をエクセルで読み込めるcsvファイル(.csv)に変換するバッチファイルを作成したい

依頼内容の概要

テキストファイル(.txt)をエクセルで読み込めるcsvファイル(.csv)に変換するバッチファイルを作成したい。その際、ユーザーがバッチファイルの中身を編集しなくていいように、任意のファイルに対応したものを作成したい。(T様より)

依頼内容

カンマでなく、空白で区切られたテキストファイルをCSVに自動変換して保存したいと思っています。対象ファイルは複数存在します。

「rename」コマンドで「txt」ファイルから「csv」ファイルに変換すると全てExcel(csv)のA列に表示されてしまいますので空白をカンマに置換してcsvへ変換すると良いのかなと思いました。変換前の対象ファイルは以下のような感じです。

【変換前のファイル内容】
作成日 伝票番号 商品名 担当者
20170215 75000 ATF Aさん
20170216 75001 CVTF Bくん
20170217 75002 5W30 C様

以下に、ここまで作成した未完成のバッチファイルを示します。

このままでは、バッチファイルを使用する人が そのつどバッチファイルの内容を書き換える必要がでてしまうため、まだ未完成です。

上記のような操作をバッチファイルで実行することは可能なのでしょうか?

弊サイトから回答

ご要望を拝見させていただき、私の方でサンプルを作成してみました。既に、やりたいことの大まかなバッチプログラムはできているということで、T様が作成された上記のファイルを編集して作成しています。

まず、バッチファイルを利用する方がファイルの中身を編集せずに済むように改良しました。

対象のテキストファイルをこのバッチ上にドラッグ&ドロップすると、「txt」ファイルを「csv」ファイルに変換します。バッチファイルと使用するファイルは、すべて同じフォルダに置いてください。

※テキストファイル(.txt)にしか対応してませんのでご注意下さい。

 

次に、複数のファイルを対象にできるようさらに改良を加えました。

こちらは、複数の対象ファイル名を「対象ファイル名リスト.txt」に書いておきます。あとは、バッチファイルをダブルクリック、もしくはコマンドプロンプト上で実行すれば複数のcsvファイルが生成されます。

※バッチファイルと使用するファイルは、すべて同じフォルダに置いてください。

 

ユーザーがコマンドプロンプトから入力した文字列をテキストファイルに保存していきたい

依頼内容の概略

ユーザーがコマンドプロンプトから入力した文字列をテキストファイルに順次保存していきたい。テキストファイルは上書きせずに、どんどん追記していく。(S様より)

依頼内容

ユーザーがコマンドプロンプトから入力した文字列を既存のテキストファイルに保存していきたいです。コマンドプロンプト上の表示の流れは以下のようなイメージです。

 

【コマンドプロンプト上の表示】
入力してください…
(Enter キーでテキストファイルに保存します。改行はできません。スペースキーをご利用ください。)

[※ここで、ユーザーが文字列を入力する]

保存しました。

 

出力されるテキストは、以下ような感じです。

【出力されるテキスト例】
2017/02/28 あいうえお
2017/03/01 かきくけこ

弊サイトから回答

以下、ご要望がありましたユーザーの入力情報をテキストファイルに追記していくバッチファイルです。

4行目でユーザーに入力を求めます。それを変数「text」に代入し、7行目で「test.txt」ファイルに出力しています。「set」コマンドについては「set(変数の設定・計算・ユーザーからの入力情報の取得) -コマンド別解説-」で詳しく解説しています。

使用方法は、バッチファイルをコマンドプロンプト上で実行、もしくはダブルクリックしていただくと、テキストの入力を求められます。 テキストを入力し、「Enter」キーを押すと「test.txt」に入力したテキストが追記されます。 「test.txt」が存在しない場合は作成されます。 一度の入力でプログラムは終了します。

 

上記のプログラムを、さらに続けて何度もテキストを入力できるように改良しました(以下のバッチファイル)。 

「goto」コマンドとラベル機能によって繰り返し入力を求めるようループ処理を行っています。「goto」コマンドに関しては「ラベルとgoto(行の移動) -コマンド別解説-」をご覧ください。ただし、10行目に記述しているように、「exit」と打ち込むとループから脱出し、プログラムを終了するようにしています。

したがって、入力が終了したら「exit」を入力して下さい。プログラムを終了します。

 

ファイルを順番に読んで処理していくバッチファイルを作成したい

依頼内容の概略

ファイルを順番に読んでいき、バッチファイルで順次処理を行っていく。その際、前のファイルの処理が終わってから次のファイルに進む。(Y様より)

依頼内容

txtファイルを処理するバッチファイル「A.bat」があります。n個のファイル「1.txt, 2.txt , 3.txt … n.txt」をバッチファイル「A.bat」に渡していき、順次処理を実行したいです。

ただし、A.batにファイルを渡すときは必ず一つずつ渡していき、一つファイル処理を待ってから次の処理に移ります。以下、バッチファイル処理のイメージ図を示します。

【処理手順】

A.bat 1.txt…1番目の処理

—処理—

A.bat 2.txt…2番目の処理

—処理—

A.bat 3.txt…3番目の処理

—処理—
  ・
  ・
  ・
Abat n.txt…n番目の処理

—処理—

弊サイトから回答

以下に、ご要望のバッチファイルを掲載します。まず、「A.bat」はサンプルとして引数として引き渡したファイル内容を表示するプログラムにしました。以下は、バッチファイル「A.bat」の内容です。

 

続いて、 「A.bat」ファイルで「1.txt」から「n.txt」までを順番に読み込み処理を行うバッチファイル(loop_number.bat)を作成します(以下のプログラム)。

現在はn=5と設定しております(4行目)。7行目から12行目のforループで、「%%a」を1から5まで増加させていきそれをファイル名として使用しています。したがって、 このバッチファイルでは処理対象のファイル名が「1.txt」、「2.txt」…のように連番になっている条件下でのみ使用できます。

 

さらに、上記のバッチファイルを改良して、任意のファイル名に対して 順番に処理を行うバッチファイル(loop_filenamelist.bat)を作成しました(以下のプログラム)。

これは処理対象としたいファイル名を「filename_list.txt」に書いておきます。 forループではオプション「/f」を指定しておりファイルに記述してある文字列を順に読み込んでいくループとしています。したがって、「filename_list.txt」ファイルに記述したファイル名に対して処理を順番に実行します。

 

毎日、データをFTPでファイルアップロードする作業を自動化したい

依頼内容の概略

毎日加工した商品データをFTPでファイルアップロードするバッチファイルを作成したい(I.A. 様より)

依頼内容の詳細

はじめまして、ネットで検索していてこちらにたどり着きました。何卒よろしくお願い致します。

仕事の関係で毎日加工した商品データーをFTPでファイルアップロードしないといけません。いままで何も考えずに、半年手動で行っておりました。しかし、この毎日のちょっとした手間を自動化できないものかと思い調べていましたら貴殿のブログと出会いました。

ファイルとFTPでアップロードする作業をBatを使って出来ればと思っております。検索してみても簡単な解説しかなく、実際のどのように使っていいのか分からず途方にくれておりました。よろしくお願い致します。

弊サイトから回答

サーバーへのアップロードを自動化したいということですが、FTPソフトのFFFTPとバッチファイルを使えば実現可能だと思います。幣サイトに参考になる記事がいくつかありますので、ご紹介いたしますが、どこまでを自動化するかによって、参考にして頂きたい記事が異なります。

まず、データのアップロードのみを自動化したい場合、以下の記事が参考になると思われます。

バッチファイルを使ってFTPで自動アップロードする
この記事は、A.I.様の要望を意識して追加したものになりますので、もしA.I.様のやりたいことがこの記事とずれている場合、A.I.様の要望を正確に把握できていません。 その際は、お手数ですが、「そうじゃなくて、こうゆうことがしたい」というのをもう一度教えていただけますでしょうか。

さらに、データのアップロードのみでなく、パソコンの起動からデータのアップロード、そしてシャットダウンまですべてを自動化したい場合は、上記の記事と合わせて、以下の記事もご覧ください。

夜中に自動でバックアップを取る
こちらは、毎日のバックアップを完全に自動化するための方法について書いていますが、バックアップのバッチファイルの代わりに、データアップロードのバッチファイルを指定すれば、毎日決まった時間に完全(パソコンの起動から終了まで)に自動で行うことができます。

以上、参考になりましたら幸いです。

 

「%*」で「%0」が含まれないのはなぜか教えてください

依頼内容の概略

「%*」で「%0」が含まれないのはなぜですか?(abc 様より)

依頼内容

バッチファイルの作成依頼とは少し離れますが、バッチパラメータ(引数)で全ての引数を取得するときには「%*」とすると1つ目以降の引数を全て取得できますが、自分自身を指す「%0」だけは[%*」には含まれないのは何故でしょうか?

%*は0以外の引数全て~という記述は見つかりますが、%*という書き方だけを見れば、%0も対象に入るように思えます。

弊サイトから回答

申し訳ありませんが、「「%*」になぜ「%0」が含まれないのか」は分かりません。そのようになっているからとしかお答えできません。

私の考えでは、すべての引数を取得する「%*」は、「for」ループによって引数を一つずつ読み込んでいくときによく使用されますが、そのとき、「%0」のようなバッチファイル名のような種類の異なるものが混じっていては、同一処理するときに都合が悪くなり不便であるからではないかと思っています。

以下の記事を追加しましたので、詳しくはそちらをご覧下さい。

すべての引数を取得する -やりたいことから検索-

 

スペースを含んだ文字列をif文で使用する場合にうまくいかないのですが、バッチファイルの修正をお願いします

依頼内容の概要

スペースを含んだ文字列をif文で使用するバッチファイルのエラー修正をして欲しい。(K様より)

依頼内容

以下のバッチファイルについてです。

これを実行すると、初めの2行によって、「test.txt」ファイルに以下の内容が出力されます。

(※最後にスペースがあることに注意)

このとき、イベントログを登録したいのですが、3行目のif文で失敗してしまいます。どのようにすればよいでしょうか?

弊サイトから回答

まずは、エラーが生じる理由です。

3行目の

の「type test.txt」によって、「1 0 」と出力されるのですが、これにより3行目は、

となります。これだと、余分なスペースが入っていて「if」文の文法的に間違っているので、エラーが生じます。スペースが問題なのでダブルクウォーテーション「”」を使って、

としたいところですが、これだと文字列「type test.txt」と文字列「1 0 」を比較してしまうことになってしまいます。

そこで、「type test.txt」の実行結果を一度変数に代入します。その変数を使って「if」文を書きます。以下に修正したバッチファイルを示します。

5行目で変数「test」に「type test.txt」の出力を代入しています。これで、「test」に「1 0 」が入ります。これを使って「if」文を書きます。このとき文字列にはスペースを含んでいるので、ダブルクウォーテーション「”」を使って、変数を囲みます。

 

ファイル内容の置き換え時に関するバッチファイルの修正依頼です

依頼内容の概要

ファイル内容の置き換え時に関するバッチファイルの修正依頼です(K様より)

依頼内容の詳細

以下のバッチファイルについてです。

このバッファイルでやりたいことは、まず、「test.txt」ファイルの記載内容(以下に示す)、

を最後の一文字「0 」で上書きします。さらにその後に続いて「0」を追記します。

想定では、

のはずが、

となってしまいます。どのように直せばよいでしょうか。

弊サイトから回答

まず、バッチファイルの1行目で「test.txt」ファイルの内容を変数「str」に代入しようとしていますが、このままでは行全体を読み込めていません。オプション「 delims=」を追記して、

とします。これで、一行全体「1 0 」が変数「str」に入ります。

次に、2行目はこの変数から最後の一文字を抜き出しでいますが、「str」には最後にスペースがありますので、「-1」を「-2」とする必要があります。また、抜き出す文字は1文字ですのでこれも指定します。

これで、「test.txt」ファイルに「0」が上書きされます。さらに3行目の出力は同じ行に出力させたいので、改行なしにしたいです。よって、

とします。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す