我正在使用Windows Bactchfile抓取所有不以“ abc”开头的文件夹。因此,忽略文件夹名称abcd和abc123等。似乎IF语句不处理通配符。我该怎么做。
for /D %%A in (*) do (
if not %%A == abc* (Do commands)
)
我找到了一些帮助,说要使用类似下面的内容,但是无法获得正确的语法。
%variable:~offset,length%
我尝试了这种语法,但它不正确:
if not %%A:~0:3 == abc (Do commands)
答案 0 :(得分:2)
仅给出替代方案而无需使用临时变量(因此不需要delayed expansion):
for %%a in (*) do (
echo %%a|findstr /ib "abc" || (
echo Do commands with '%%a'
)
)
findstr /ib
查找以某个子字符串(b
)开头的(abc
)字符串,而忽略大小写(i
)
||
的工作方式是“如果先前的命令(findstr)失败了”
答案 1 :(得分:0)
for /f "eol=: delims=" %%F in ('dir /b * ^| findstr /vbi abc') do (
REM your commands processing file %%F here
)
eol=:
可能不是必需的。我将其包括在内是因为您不希望排除任何以EOL字符开头的文件,该文件默认为;
,并且文件名也可以以;
开头。任何文件都不能以:
开头,因此对于EOL是安全的。
我之所以选择使用FOR / F,是因为在循环执行任何命令之前,它会缓存整个文件列表,使您可以自由地对这些文件做任何事情,包括重命名它们。
如果使用简单的FOR循环,则重命名的文件可能会被处理两次(或更多!),因为FOR可以在发现文件之前开始处理文件。重命名文件的新名称可能会稍后出现在列表中并得到重新处理。