こんばんは
あと少しですばらしい自動化バッチが完成するところなんですが、1点だけできなくて困っているところがあります。
バッチファイルと同じディレクトリにある index.xml の一行目は次のようになっています。
C:\folder\folder\file\hoge.ttxt<?xml version="1.0"?>
すべて1行目です。同じ論理行です。
本来、<?xml version="1.0"?>で始まらなければならない xml ファイルが、いろいろな処理の都合上、冒頭にファイルパスが紛れ込んでしまっているのです。前工程の処理は私の手を出せる範囲ではなく、この状態からスタートしなければなりません。
このファイルの1行目から冒頭のファイルパスの部分を削除したいと思っています。
パスは毎回違うので、1行目すべてを「<?xml version="1.0"?>」で置き換える、という動作にすれば確実だと思います。
具体的なやり方を教えてください。
xml ファイルは大きいときで 7MB くらいあります。UTF-8で保存しています。
No.2ベストアンサー
- 回答日時:
回答遅れてすみません。
ifの処理がうまくいかないとのことなので、for処理を見たら、
読み飛ばし機能がついていました。これでどうでしょうか?
cpch 65001
echo ^<?xml version="1.0"?^> >>test.txt
for /f "skip=1 delims=" %%line in ( index.xml ) do (
echo %%line >>test.txt
)
この回答への補足
http://stackoverflow.com/questions/5450921/batch …
別ファイルに出力せずとも上記のサイトの方法で
for /f "skip=1 delims=" %%l in ("%%x") do (>>tmp echo.%%l)
move /y tmp "%%x"
このようにすればいいことがわかりました。
ありがとうございます。
こちらの環境では「%%line」とすると動作しませんでした。
予約後か何かでしょうか。原因は不明です。試行錯誤の結果、この変数名を変えたら動きました。
cpch 65001
echo ^<?xml version="1.0"?^> >>test.txt
for /F "skip=1 delims=" %%a in ( index.xml ) do (
echo %%a >>test.txt
)
ファイルが7MBくらいあるので、この動きだとちょっと実用性に問題があるかもしれません。
ほかにもっとスマートな(ファイルの1行目だけ置き換えて保存とか)ができるか調べてみます。
No.3
- 回答日時:
他の質問もそうだけど, 「バッチファイルだけでなんとかしよう」というのがそもそも非現実的なんだと思う.
ちなみに #2 の問題はヘルプを読めばわかる.
そうですね。
でもこれができれば、当面はすべてが自動化されて手間はかからなくなります。
圧縮や解凍についてはソフトをインストールしてコマンドから使うようにしていますよ。
今更ながら、VBSでやればよかったのか、とも思いますけどね。
No.1
- 回答日時:
作成するファイル名は、お任せします。
chcp 65001
set 変数 ""
for /F を使って入力を1行ずつ読み込む(
if 変数が空文字だったら
echo <?xml version="1.0"?> >>出力ファイル
set 変数 "処理済み"
else
echo 一行分のデータ >>出力ファイル
)
というか、こんな仕様で処理をするとあなたがバグを仕様化しているので、
後々、問題になりますよ。
この回答への補足
@echo off
setlocal enabledelayedexpansion
set skip=""
for /F "delims=" %%a IN (index.xml) DO (
if !skip!=="" (
echo ^<^?xml version="1.0"?^> >> test.txt
set skip="skip"
) else (
echo %%a >> test.txt
)
)
調べてここまでできたんですが、else の処理がされていないみたいです。おそらくエスケープしなきゃいけないんですかね。
あきらめます。
ありがとうございます。
説明が気になっているところを書き直してみたんですが、なかなか動作しません。
for /F を使って入力を1行ずつ読み込む(
これは
for /F "delims=" %%a in (D:\Folder\index.xml) do (
これでよいのでしょうか?
また
echo <?xml version="1.0"?> >>出力ファイル
これは、一番最初のループなので・・・出力ファイルは新たに作成する、ということでしょうか?
set 変数 "処理済み" は理解しました。
これで、2回目以降のループで、先ほどの出力ファイルにどんどん追加していく、ということですよね?
7MBくらいのファイルの先頭行を定型的に置き換えるだけなんですが、のこりすべてを別のファイルとして書き出すしか手はないのでしょうか?ほかにスマートにできる方法がありましたら教えてください。
原因はまだ不明ですが、いただいたコードをうまく書き換えて実行可能なものにできませんでした。
たとえば
指定のファイルを開いて1行目だけを <?xml version="1.0"?> にして保存して閉じる、とか
bat ファイルというのはそういう操作が簡単にできるのかと思っていましたが、どうもコードを見てもなかなかピンとくるものがなく・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
ファイルの先頭行を全て削除したい
Windows Vista・XP
-
txtファイルから特定の文字列が書かれた行だけを取得や削除するソフト
フリーソフト
-
-
4
バッチファイルを使ってテキストファイルの任意の行を削除したい
その他(プログラミング・Web制作)
-
5
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
6
テキストファイルの最終行を削除したいのですが
その他(プログラミング・Web制作)
-
7
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
8
Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法
その他(プログラミング・Web制作)
-
9
batファイル処理でのテキストファイルの内容を編集
その他(コンピューター・テクノロジー)
-
10
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
11
echo abc" >> test.txt で、先頭に追加するには?"
その他(OS)
-
12
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
13
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
14
バッチでcsvファイルの指定のカラムを編集したい
その他(プログラミング・Web制作)
-
15
バッチファイルで文字列削除について
その他(プログラミング・Web制作)
-
16
バッチファイル 指定行の切り出し
その他(Microsoft Office)
-
17
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
18
コマンドプロンプトで指定した文字列を削除
その他(コンピューター・テクノロジー)
-
19
ファイルの最後に文字列挿入
その他(プログラミング・Web制作)
-
20
CSVファイルの項目行を削除して結合するには?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8でエンコーディングとはど...
-
Windowsで見かけるxmlファイル...
-
C#で使用中のファイルに別のフ...
-
ExcelVBAで書き出した文字が化ける
-
バッチファイルでテキストファ...
-
DOSコマンドラインからxmlファ...
-
u_shortなどの省略した宣言につ...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
ルート要素ノードが2個ある場合?
-
あるノードリストに、特定の名...
-
XMLで要素が記述された順番に意...
-
VBSでxmlの値を書き換えたい
-
SNMP リンクダウンとノードダ...
-
双方向リストの関数
-
XMLで特殊文字を扱うにはどうし...
-
XML同じ名前の要素を自動で集約...
-
TreeViewの再表示のちらつきを...
-
XSLで、XMLの空タグを制御したい。
-
VB.NETで最後フォのフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでテキストファ...
-
UTF-8でエンコーディングとはど...
-
XMLデータを整形して、ブラウザ...
-
Windowsで見かけるxmlファイル...
-
ExcelVBAで書き出した文字が化ける
-
C#で使用中のファイルに別のフ...
-
XMLファイルの作り方がわかりま...
-
eclipseへのxmlファイル追加
-
DataSetのwriteXmlでのXML宣言
-
GoogleマップでKMLが読み込めない
-
VBSでXMLを読込、検索結果をテ...
-
XMLの編集?について
-
VBAでxmlファイルの置換をしたい
-
DOSコマンドラインからxmlファ...
-
アメーバブログのxmlファイルの...
-
複数のXMLファイルからデータを...
-
サイトマップ(sitemap.xml)って...
-
XMLファイルのattribute値を取...
-
XMLやRDFファイルについて
-
Google Sitemapに登録
おすすめ情報