标签归档:命令

[原]windows命令Copy合并多文件的bug及解决

先来看看copy的语法:

C:\Documents and Settings\Administrator>copy /?
将一份或多份文件复制到另一个位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ …]] [destination [/A | /B]]

source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时,
尽可能使用短文件名。
/Y 不使用确认是否要改写现有目标文件
的提示。
/-Y 使用确认是否要改写现有目标文件
的提示。
/Z 用可重新启动模式复制已联网的文件。

命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。
这可能会被命令行上的 /-Y 替代。除非 COPY
命令是在一个批文件脚本中执行的,默认值应为
在改写时进行提示。

要附加文件,请为目标指定一个文件,为源指定
数个文件(用通配符或 file1+file2+file3 格式)。

其中,file1+file2+file3还是挺好用的,我一般拿来合并JS脚本,比如:
copy bianbian.main.js + bianbian.DOM.js + bianbian.other.js bianbian.src.js /Y
jsmin <bianbian.src.js >bianbian.js
(用jsmin来删除注释缩进等等,让代码小一点)。

不过,现在发现多文件合并有bug:
1)合并以后在文件末尾会产生一个奇怪的字符(十六进制ASCII码为”1A”),如果直接引用这个js,则任何浏览器都会报错。不过这个字符用jsmin了以后就会被删除,所以这个bug倒并不要紧

2)如果这些文件格式是UTF-8的,合并的时候不会删除每个文件的UTF-8头声明,导致解析出错。我们知道UTF-8格式的文件会用“FF FE”开头(可以看做UTF-8声明),而copy只是简单地将所有文件的ASCII码合并,所以合并后的文件正文也会有“FF FE”。这样,会导致每个源文件第一行的脚本解析出错(比如function,会解析成 ?unction,此处问号表示不认识的字符。不过这个解析目前只在Opera下发现出错)
。解决的办法是每个源文件的第一行都留空,不要写脚本。