Windows - 忽略多个通配符的批处理文件

时间:2016-11-04 18:37:33

标签: windows batch-file

我正在尝试使用批处理文件来生成linux库的符号链接(是的,我试图在Windows上执行此操作,它需要跨平台)。我有3个文件

  • libnum1.so.1.0
  • libnum2.so.1
  • libnum3.so

我正在尝试遍历文件,只生成前2个文件的链接(第3个文件不需要生成链接)。我使用以下命令循环遍历文件

for %%F in (lib*.so.*) do (
    echo %%F
)

然而,它不是只抓取前两个文件,而是抓取第三个文件,这会破坏我的脚本。如何使for循环忽略任何以.so?

结尾的文件

3 个答案:

答案 0 :(得分:1)

for %%F in (lib*.so.*) do IF /i "%%~xF" NEQ ".so" (

如果文件名的扩展名部分不等于.so,则无论如何......

for/?|more或`if /?来自docco的提示

答案 1 :(得分:1)

我完全忘记了无证的通配符。

for %%G IN ("lib*.so.<*") do echo %%G

您可以在Dostips上阅读相关内容。 http://www.dostips.com/forum/viewtopic.php?f=3&t=6207#p39390 但这是Dave运行的测试。

                |                         |      GREEDY NATURE                                                          
file            | "??.??.??" | ">>.>>.>>" | "?a?.??.??" | ">a>.??.??"
----------------+------------+------------+-------------+-------------
a               |  match     |  no match  |  no match   |  no match
ab              |  match     |  no match  |  no match   |  no match
abc             |  no match  |  no match  |  no match   |  no match
a.1             |  match     |  no match  |  no match   |  no match
ab.12           |  match     |  no match  |  no match   |  no match
abc.123         |  no match  |  no match  |  no match   |  no match
a.1.x           |  match     |  match     |  no match   |  no match
ab.12.xy        |  match     |  match     |  no match   |  no match
abc.123.xyz     |  no match  |  no match  |  no match   |  no match
a.1.x.7         |  no match  |  no match  |  no match   |  no match
ab.12.xy.78     |  no match  |  no match  |  no match   |  no match
abc.123.xyz.789 |  no match  |  no match  |  no match   |  no match

                                                         | NON-GREEDY
file            | "*.*.*"  | "*."     | "**." | "abc.*." | "*a*"
----------------+----------+----------+-------+----------+-----------
abc             |  match   | match    | match | match    | match
abc.123         |  match   | no match | match | match    | match
abc.123.xyz     |  match   | no match | match | match    | match
abc.123.xyz.789 |  match   | no match | match | match    | match

                                                         |      NON-GREEDY
file            | "<.<.<"  | "<"      | "<<"  | "abc.<"  | "<a<"    | "<a<<"
----------------+----------+----------+-------+----------+----------+--------
abc             | no match | match    | match | no match | match    | match
abc.123         | no match | no match | match | match    | no match | match
abc.123.xyz     | match    | no match | match | no match | no match | match
abc.123.xyz.789 | match    | no match | match | no match | no match | match

答案 2 :(得分:0)

Magoo的答案是针对您的问题的最佳解决方案,但这是使用FINDSTR命令的正则表达式解决它的方法。

FOR /F "delim=" %%G IN ('dir /B lib*.so.* ^|findstr /R /C:"lib.*\.so\..*"') DO ECHO %%G