Batch file 如何查找*.css文件进行进一步处理,但忽略所有*.min.css文件?

Batch file 如何查找*.css文件进行进一步处理,但忽略所有*.min.css文件?,batch-file,Batch File,我想使用yui compressor自动递归压缩我的js/css文件,其命令类似于以下命令: for %%f in (*.css) do ( java -jar d:\projects\yuicompressor-2.4.8.jar -o %%~nf.min.css --charset utf8 --nomunge %%~nf.css ) 但是,问题是,如果我使用上面的循环,当我稍后更新css/js文件并再次运行此脚本时,将生成大量以.min.min.css和.min.min.js结尾

我想使用yui compressor自动递归压缩我的js/css文件,其命令类似于以下命令:

for %%f in (*.css) do (
    java -jar d:\projects\yuicompressor-2.4.8.jar -o %%~nf.min.css --charset utf8 --nomunge %%~nf.css
)
但是,问题是,如果我使用上面的循环,当我稍后更新css/js文件并再次运行此脚本时,将生成大量以.min.min.css和.min.min.js结尾的文件

如何在忽略所有*.min.css文件的情况下查找要压缩的*.css文件

编辑: 在遵循@Magoo的递归版本说明之后

D:\bak\static>compress.bat
java.io.FileNotFoundException: bakstaticstyleSet.min.css:\bak\static\styleSet.cs
s (文件名、目录名或卷标语法不正确。)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.ja
va:208)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
@回音 SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION 设置sourcedir=U:\sourcedir 对于/f delims=%%f英寸 'dir/b/a-d%sourcedir%\*.css^ findstr/v/i/L/c:.min.css' 做 ECHOjava-jar d:\projects\yuicompressor-2.4.8.jar-o%%~nf.min.css-charset utf8-nomunge%%~nf.css 后藤:EOF 这应该可以解决你的问题

您需要更改sourcedir的设置以适应您的环境

java命令只是回显-验证后移除回显以激活

@回音 SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION 设置sourcedir=U:\sourcedir 对于/f delims=%%f英寸 'dir/s/b/a-d%sourcedir%\*.css^ findstr/v/i/L/c:.min.css' 做 ECHOjava-jar d:\projects\yuicompressor-2.4.8.jar-o%%~dpnf.min.css-charset utf8-nomunge%%~dpnf.css 后藤:EOF 递归的修正。假设java理解引用的文件名。如果路径/文件名不包含空格等分隔符,则不需要引号

@回音 SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION 设置sourcedir=U:\sourcedir 对于/f delims=%%f英寸 'dir/s/b/a-d%sourcedir%\*.css^ findstr/v/i/L/c:.min.css' 做 PUSHD%%~sdpf 回响光盘 ECHOjava-jar d:\projects\yuicompressor-2.4.8.jar-o%%~snf.min.css-charset utf8-nomunge%%~snf.css 邻苯二胺 后藤:EOF 试图解决递归问题的修订

我强烈怀疑这个问题与unicode有关,cmd不能很好地处理这个问题

此版本使用pushd/popd框架将当前目录更改为当前目标。我无法测试unicode,因此使用~s运算符调用的shortname可能会有所帮助

我包括回声!光盘只需显示当前目录,免费使用我错误地留在原始批处理中的setlocal enabledelayedexpansion。我没有使用它,它是我的批处理模板的一部分,可以省略,但必须在那里使用!瓦尔!扩展语法

补充资料,我希望是有用的

实际上,每个文件和目录都有两个名称——长名称和短名称。短名称是使用一种不相关的算法从长名称生成的,但它的目的是按照原始DOS 8.3命名方案创建一个替代名称-名称为8个ANSI字符,扩展名为3个,用点分隔。当然,如果名称已符合8.3约定,则不会创建额外的名称

您可以通过在提示符下执行dir/x来查看这些名称

在批处理中,FOR循环可以提取部分文件名。如果%%a是元变量,即控制循环的变量,则%%pa将只生成目录路径部分。类似地,D用于驱动器,N用于名称,X用于扩展,还有其他。有关更多文档的提示,请参见/?|更多

要访问短名称(设计为保证-ANSI-8.3),请使用~s修饰符,因此%%~sna表示文件%%a的短名称

Unicode是后来的发明。我希望使用短名称可以让cmd处理文件,因为它不是真正为unicode设计的


由于生成的文件名为%%~snf.css,因此这意味着%%f+.css中的短名称,而pushd/popd框架实际上使用其短名称将当前目录更改为实际目录。因此,我们在生成新文件时不需要目录名,因此默认为当前目录,并且文件名是短名称,因为目标filespec包含s修饰符。因此,删除s并将其设置为%%~nf.css将使用原始的长名称——如果原始文件名不是unicode,这可能是安全的。

!还有一个问题,如果我想递归处理子目录下的所有文件呢?差不多了。但是生成了一些带有有线名称的文件。我想知道它是否也与unicode有关。见上文。
check_input.js   --->   CHECK_~1.min.js
jsAddress.js     --->   JSADDR~1.min.js