2012-05-23 66 views
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] 
.... 

我要去哪裏錯了呢?

謝謝

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

你的主要問題是你有顛倒了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信道信息( )條款。

+0

「全部結合」腳本完美無缺!謝謝! – neahan

0

例如,你可以加入FILE1.TXT和FILE2.TXT到一個新的文件名爲file3.txt:

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

OR:

copy/b *.css newfilename.css 

或用於所有文件一個文件夾:

copy/b * "newfilename_with_path" 
+0

這應該工作,除了neahan想要一個評論介紹每個css塊顯示代碼的來源。 – dbenham

+0

無論如何感謝您的提示。 – neahan