2

複数の css ファイルを 1 つのファイルに結合するバッチ スクリプトを作成しようとしています。これまでのところ、私はこれを思いつきました...

# Set start folders & files
set fn1=filename.css
set fn2=another-filename.css
set fn3=yet-another-filename.css

# get filename add to temp file inside comment syntax
echo /* %fn1% >>  tmp.css
echo. --------------------------------------------------------------- */ >>  tmp.css
echo. >>  tmp.css

# copy file contents
copy/b %fn1% + tmp.css

# repeat with other files...

echo /* %fn2% >>  tmp.css
echo. --------------------------------------------------------------- */ >>  tmp.css
echo. >>  tmp.css
copy/b %fn2% + tmp.css

...

rename tmp.css  combined-files.css
move combined-files.css \new-folder\combined-files.css

問題は、次のものが生成されることです

/* filename.css
--------------------------------- */
/* another-filename.css
--------------------------------- */
/* ... */

[styles from filename.css]
[styles from another-filename.css]
....

これのどこが間違っているのですか?

ありがとう

ps ms-dos FOR コマンドを使用して上記を単純化しようとする私の試みもかなり厄介です。

set commentpt1=\*
set commentpt2=----------------------------------------- *\

FOR /F %%I IN ('DIR /s C:\[folder location]') DO echo %commentpt1% %%~nI 0x0A %commentpt2% 0x0A 0x0A >> temp.css copy/b %%I + tmp.css >> temp.css
4

2 に答える 2

3

主な問題は、COPY /B コマンドでファイル名の順序を逆にしたことです。この問題の副作用は、元のファイルを変更していることです!

おそらく COPY /B コマンドの出力を見たくないので、nul にリダイレクトできます。

移動する前に一時ファイルの名前を変更する必要はありません。

実際、なぜ一時ファイルを使用するのでしょうか? 目的の宛先ファイルに直接書き込んでみませんか?

ファイルの内容の前ではなく、後に空白行を挿入します。見た目が良くなったと思います。の代わりに
使用する方が安全です。echo(echo.

しかし...あなたが望むことを行うためのはるかに簡単でクリーンな方法があります。

@echo off
(
  for %%F in (
    "filename.css"
    "another-filename.css"
    "yet-another-filename.css"
  ) do (
    echo /* %%~F
    echo --------------------------------------------------------------- */
    type %%F
    echo(
  )
)>"\new-folder\combined-files.css"

フォルダー内のすべての .css ファイルを結合する場合は、さらに簡単です。

@echo off
(
  for %%F in ( *.css ) do (
    echo /* %%~fF
    echo --------------------------------------------------------------- */
    type "%%~fF"
    echo(
  )
)>"\new-folder\combined-files.css"

上記は現在のディレクトリを処理しますが、IN() 句にパス情報を含めることができます。

于 2012-05-23T14:45:32.517 に答える
0

たとえば、file1.txt と file2.txt を file3.txt という名前の新しいファイルに結合できます。

copy/b file1.css+file2.css file3.css

また:

copy/b *.css newfilename.css

または、フォルダー内のすべてのファイルの場合:

copy/b * "newfilename_with_path"
于 2012-05-23T10:14:02.863 に答える