2

ええ、バッチ スクリプトです。知っている。ごめん。

最終的な目標は、XML 要素を含むファイルを作成することです。今まで手作業で作ってきましたが、もっといい方法があるはずです。私の最初のアイデアは、バッチ スクリプトを実行することです。私が今までやってきたことは、id、page、および src="page_#" 項目に手動で +1 を追加してコピー/貼り付けすることです。xml ファイルに 40 エントリしか含まれていない場合は問題ありません。100 を超えるとあまり良くありません。

目標: 以下のnavPoint id=#Page #、およびcontent src=page_#などの要素をインクリメントする必要があります。

<navPoint id="1"><text>Page 1</text><content src="page_1.html"></navPoint>

1つの変数をループして更新できる作業用バッチスクリプトがあります。したがって、次のようになります。

echo
for /l %%x in (1, 1, 8) do (
echo ^<navPoint id="navPoint-%%x"^>^<navLabel^>^<text^>Page %%x^</text^>^</navlabel^>^<content src="page_%%x.html"/^>^</navPoint^>)>>C:\Users\me.txt

この最後の部分、>>C:\Users\me.txt は、それを txt ファイルに送信します。

ただし、ページ番号を 1 ではなく 2 から開始する必要があります。私のバッチ スクリプトはうまく機能し、%%x は 1 から開始し、均一に増加します。%%x より 1 大きい別の変数がループに必要です。

結果は次のようになります。

<navPoint id="1"><text>Page 2</text><content src="page_1.html"></navPoint>

次の結果は次のようになります。

<navPoint id="2"><text>Page 3</text><content src="page_2.html"></navPoint>

等...

これをバッチ スクリプトでどのように実現できますか? %%x+1と同じくらい簡単だと思っていましたが、そうではありません...

4

1 に答える 1

3
  1. で演算ができますset /ahelp setコマンドラインから実行して、それについて読んでください。

  2. ブロック内に変数を設定する場合 (例: iffor )、 で遅延変数展開を有効にする必要がありますsetlocal EnableDelayedExpansion。次に、変数を展開する!代わりに使用します。%コード ブロックの外にいる場合は、 の使用に戻ることができます%help setまた、展開の遅延についてもお知らせします。

これら 2 つの情報を使用して、コードを次のように変更して、必要なものを取得できます。

@echo off
setlocal EnableDelayedExpansion
for /l %%x in (1, 1, 8) do (
    set /a PAGENUM=%%x+1
    echo ^<navPoint id="navPoint-%%x"^>^<navLabel^>^<text^>Page !PAGENUM!^</text^>^</navlabel^>^<content src="page_%%x.html"/^>^</navPoint^>
)>>C:\Users\me.txt
于 2013-01-17T21:56:56.660 に答える