2017-03-11 7 views
-3

このバッチファイルを作成した後、バッチファイルでインストーラを作成したいのですが、コード部分でバッチファイルを作成することに固執しました。バッチファイルを作成して別のコードを作成するには

cat > %drev%:\Notekeeper\Program.bat << EOF 
script script script 
script script script 
EOF 

をその後私は、私はすべての行の前にエコーを追加するために必要な実現:

私はこれを使用してみました。それは300行以上のコードがあるときに問題になります...

だから、私はすべての前にechoを追加する必要はありません。

上記のスクリプトを実行します
+3

これは、バッチファイルではなくシェルスクリプトのように見えます。 – DavidPostill

+1

ええ、 'cat'とheredocの使用の間に、私はこれが実際にbashであることを賭けたいでしょう。あるいは、バッシュスクリプトをバッチに移植しようとしていますか? – SomethingDark

答えて

3

これは、これを行うための一つの方法です:

@echo off 
setlocal 

rem Get the number of the "<resource>" line 
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a" 

rem Skip such number of lines and show the rest of this file 
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > Program.bat 

goto :EOF 

<resource> 
script script script 
script script script 

例えば、このコードで行うことができますいくつかの変更があります。他の場所で

  • 場所コードのセクションは(ありませんこのファイルの最後にあります)。
  • 複数のコードセクションがあります。
  • コードをコピーしているときに%variables%を展開します。
  • エトセトラ...

注:他のタイプのファイル内のコードを含めることが<resource>と呼ばれるセクションで管理されているので、私はちょうど同じ用語を使用していました。

+0

ありがとう助けありたくさん – SpoodytheOne

+0

私はこのスクリプトを何ヶ月も探しています...素敵なスクリプトです! – SteveFest

1
@echo off & setlocal enabledelayedexpansion 
(
scriptA 
scriptB 
)2>>fileA.txt:stream1 

for /f %%p in (fileA.txt:stream1) do (
    set a=%%p 
    set a=!a:'=! 
     echo !a!>> fileA.txt 
) 

  • fileA.txtにリダイレクトscriptA .....さんSTREAM1(あなたがそれを見ることができない)
  • fileA.txtとしてのSTREAM1がされますでいっぱい:.....

    'のScriptaが' regonizedない

  • forループが不要なテキストを削除し、 にそれらをリダイレクトします。ここ

fileA.txt

は別の方法ですが、それが唯一の撮影 >>"file.txt"、ない echo

(
echo script 
echo script 
echo script 
)>>"file.txt" 

短縮正しいです〜からthis Stack Overflow question

編集:

@Aaciniがコメントしたように、特殊文字はエスケープする必要があります。

+1

この解決法では、 '>'、 '|'、 ')'などのようなすべての特殊文字を "スクリプト"コードでエスケープする必要があります。最初の方法では、スクリプトコードは 'dir * .txt'のように任意のワイルド文字を含めることができません。 – Aacini

+0

ワイルドカードの問題は修正されました – SteveFest

関連する問題