我正在尝试编写一个将几个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
答案 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"