2

我正在尝试编写一个将多个 css 文件组合到一个文件中的批处理脚本。到目前为止,我已经想出了这个......

# 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 回答