プロが教える店舗&オフィスのセキュリティ対策術

指定フォルダ内にある全てのテキストファイルの文末に改行コードをつけたいと思っています。
しかし指定フォルダの中にあるサブフォルダやファイル名は不変ではありません。
量も大変な数があるためバッチファイルを作ろうとしています。(*.bat)

あるフォルダを指定すればそのフォルダに含まれるサブフォルダも対象とし
全てのテキストファイルの文末に改行コードをつけたいのですが
バッチファイルにはどのように記述すればよいのでしょうか?
理想ではそのバッチファイルが実行されているフォルダをカレントディレクトリとして取得し
そのカレントディレクトリ内のテキストフォルダ(ここでのフォルダ名は固定の予定)を指定フォルダとしたいです。

以前ほんの少しだけプログラムを触った事がある程度でコマンドプロンプトは殆ど触った事がありません。
下記のようなページを参考にしていますがうまくいきませんでした。
どなたか御教授して頂けないでしょうか。

http://oshiete.goo.ne.jp/qa/6496815.html
http://oshiete.goo.ne.jp/qa/4632586.html
http://oshiete.sponichi.co.jp/qa5051199.html

A 回答 (4件)

No2です。



ファイル末に改行コードをつけると言うことですね。
前回書いたステップ1だと、

more file.txt > file.out

で、末尾が必ず改行になります。あとは、

move file.out file.txt

で、もとのファイルに戻す。

ステップ2は、for /r を使います。/r はその下のフォルダのファイル全部と言うこと。

for /r %%F in (*.txt) do (
 more %%F > workfile.tmp
 move workfile.tmp %%F
)

この回答への補足

notnot様

再度の回答ありがとうございます。
まさに求めていた動きを実現することができました。
知らなければ手作業で無駄な時間を過ごす事になりそうでしたが
今回このように処理が出来る事を知り、色々と応用出来そうだと感じました。
勉強を始めるいいキッカケとなりました。
ありがとうございました。

補足日時:2012/03/24 16:32
    • good
    • 2

この手の質問は、あまり回答する気にはなれないが、補足にまじめに回答しているので。



まず、サンプルを使って改造すると言うアイデア(手段)は、正しいが、そこから先、人に頼るのは、実際に自分で作って、躓いたところだけ、質問するようにしましょう。

まるなげは、だめです。

自己顕示欲の強い方が全文載せるか、自作自演以外は(JavaScript, VBA系は50%の確率でそうでしたね)、まず回答する気になれず、的を得た回答になりません。

どこがうまくいかないのか、記載しましょう。

>書いてある処理内容を理解に至らず、応用できなかったという

では全く分かりません。どこが理解できなかったのでしょう。


あなたには、まず2つの問題が立ちふさがっています。

BATと言うが、DOSによるスクリプトの書式、及びコマンドの書式ですね。

次に、No1、 2 さんが的を得た指摘で、「改行マークとは」ということです。これを理解してないと、肝心な事ができません。

http://search.yahoo.co.jp/search?p=%E3%82%A8%E3% …

なんて言うキーワードで検索すると、何が問題なのか理解できるかと思います。まず何者なのか理解しないと操作できませんよ。


では最初の書式ですが、書式を理解してから、あなたが示したURLを見てください。
コマンドの書式

>for /?

>goto /?

>call /?

>echo /?

>cmd /?

>exit /?

>if /?

など分からない単語を、コマンドプロンプトで実行してあげれば、使い方がでます。

これらを理解できないのなら、自分で作るのはあきらめてください。提示されたURLのサンプルはごくごく簡単な物なので、どのようになっているか理解できいないのなら、無理です。

フリーソフトなどの自動化ツールを使ってください。

もちろんネットで検索してもでてきます。まず書式を理解しましょう。スクリプトなので、1行づつおってゆけばわかるようになっています。

ちなみに、for とかは繰り返し。他の言語だと、while, do, loopなどのコマンドも存在します。あとはサブルーチンをどうやるかです。サブルーチン(goto ラベル)を理解し、使えるようになると、幅が広がります。

DOSの場合、ラベルを使いこなさないと、複雑な事はできません。


次に改行マークですが、例えば、

echo\ > a.txt

として改行マークをキャリッジリターンと区別できるエディターで表示すれば、何が起きたか分かるはずです。

echo\ >> [既存ファイル]

なんてすれば、最後に追加される。秀丸なんて言うシェアウェアのエディタでみると、CR+LFであることがわかる。

で最後に問題は、DOSの欠点は文字列操作が大の苦手で、どうしてもというなら、いろんなテクニックが必要になる。

例えば、ファイルから特定の文字列を検索して、そこから2番目をとか最後とかを書き換え保存するなんて、もっとも苦手。

そんな時に、

改行マークだけがあるファイルを作っておき、(a.txt=最後に改行マークが無い。b=改行マークだけ)

copy a.txt + b.txt c.txt

なんてすると、a.txtファイルの最後の行に改行マークだけあるのが追加される。まどろっかしいが、シンプルです。

これだと文字列を検索する必要もないし、フルパス名でファイル名だけリストされているれば、単純にできる。

当然、最後の行に改行マークがあれば、c.txtでは最後の行は空行、1行ができるだけ。

これだと、findstr などで楽に空行判定ができ誤動作がなくなり、単純にできる。

なんていう、意味不明な事をすることになる。文字列操作なら、他のVBS, JScript, WSH, VBA等での操作に変えてください。今のうちに。

この回答への補足

lupin-333333様

回答ありがとうございます。
そしてご指摘ありがとうございました。
仰るとおりです。
DOSによるスクリプトの書式やコマンドの書式が分からず
/? と記述する事でヘルプが表示される事も存じませんでした。
ただ、インターネットで検索すれば同様に使い方は調べられるはずですので言い訳にもなりません。
調べずにこちらで質問してしましました。
今回の事で個人的にも色々な事が出来るなと感じ調べたいという意欲も沸きましたので
今後に同様の行動を起こさないように気をつけます。
ありがとうございました。

補足日時:2012/03/24 16:13
    • good
    • 0

「文末」の定義はなんですか?行末ではないですよね(行末にはそもそも改行コードが付いている)。



いずれにせよ、まず、
(ステップ1) 1ファイルを対象にしてその処理をするスクリプトを書いて、
(ステップ2) その処理をあるフォルダの下のすべてのファイルについて繰り返す
という二段階で考えた方が良いでしょう。

一般にステップ1は、バッチスクリプトだけでは書けないので、VBScriptとかJScriptとか、Cとかで書く必要があります。
まずは、「文末」の定義の明確化から。

この回答への補足

notnot様
回答ありがとうございます。

お伝えしたかった内容はNo1様の補足に付け加えました。

http://oshiete.goo.ne.jp/qa/4632586.html
こちらのページのNo4の回答で指定したフォルダ内のファイルに対しては処理する事が出来ました。

http://okwave.jp/qa/q6496815.html
あとはこちらを参考に、指定フォルダ内全てを処理対象にしたかったのですが
書いてある処理内容を理解に至らず、応用できなかったという状況です。

補足日時:2012/03/24 09:53
    • good
    • 0

テキストファイル = 文末に改行コードのあるファイル


というのが普通の認識ですが

この回答への補足

kmee様
回答ありがとうございます。

>テキストファイル = 文末に改行コードのあるファイル
すいません、知りませんでした。。
お伝えしたかったのは、テキストファイルの一番最後を改行コードの状態にしたいです。

例えば内容が2行あるようなテキストファイルをサクラエディタ等のエディタで開いた場合に
矢印を改行コードとすると
1|○○○○↓
2|○○○○↓
とこのような状態にしたいのです。
今は指定されたフォルダの中に含まれるテキストファイルに
1|○○○○↓
2|○○○○
このようなファイルも含まれています。

文末が改行コードじゃなければ改行コードをつけたすような処理イメージですが
文末が改行コードのファイルに対しても処理しても問題ないので
今は全ファイルに上記のような処理をしたいという内容になります。

補足日時:2012/03/24 09:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング