我该如何修复这个批处理脚本?

时间:2012-05-23 10:09:58

标签: dos batch-file

我正在尝试编写一个将几个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]
....

我在哪里错了?

由于

P.S。我尝试使用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

2 个答案:

答案 0 :(得分:2)

您的主要问题是您已经颠倒了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()子句中包含路径信息。

答案 1 :(得分:0)

例如,您可以将file1.txt和file2.txt加入名为file3.txt的新文件中:

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

OR:

copy/b *.css newfilename.css

对于文件夹中的所有文件的OR:

copy/b * "newfilename_with_path"