Batch file 批处理文件中if语句中的通配符
我正在使用windows bactchfile抓取所有不以“abc”开头的文件夹。因此,忽略文件夹名称abcd、abc123等。IF语句似乎不处理通配符。我该怎么做呢Batch file 批处理文件中if语句中的通配符,batch-file,Batch File,我正在使用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 comma
for /D %%A in (*) do (
if not %%A == abc* (Do commands)
)
我发现一些帮助说明使用了如下内容,但无法获得正确的语法
%variable:~offset,length%
我尝试了这种语法,但不正确:
if not %%A:~0:3 == abc (Do commands)
仅给出一个替代方案而不使用临时变量(因此不需要):
findstr/ib
查找以某个子字符串(abc
)开头(b
)的字符串,忽略大写(i
)|
的作用类似于“如果上一个命令(findstr)失败,那么”只是给出一个替代方案,而不使用临时变量(因此不需要):
findstr/ib
查找以某个子字符串(abc
)开头(b
)的字符串,忽略大写(i
)| |
的作用类似于“如果上一个命令(findstr)失败,那么”
eol=:
可能不是必需的。我之所以包含它,是因为您不想排除任何以EOL字符开头的文件,该字符默认为代码>,文件名可以以开头代码>。没有文件可以以:
开头,因此这对于EOL是安全的
我选择使用FOR/F,因为它会在循环执行任何命令之前缓存整个文件列表,让您可以自由地对这些文件执行任何操作,包括重命名它们
如果使用简单的FOR循环,则重命名的文件可能会被处理两次(或更多!),因为FOR可以在完成发现文件之前开始处理文件。重命名文件的新名称可能稍后显示在列表中并重新处理
eol=:
可能不是必需的。我之所以包含它,是因为您不想排除任何以EOL字符开头的文件,该字符默认为代码>,文件名可以以开头代码>。没有文件可以以:
开头,因此这对于EOL是安全的
我选择使用FOR/F,因为它会在循环执行任何命令之前缓存整个文件列表,让您可以自由地对这些文件执行任何操作,包括重命名它们
如果使用简单的FOR循环,则重命名的文件可能会被处理两次(或更多!),因为FOR可以在完成发现文件之前开始处理文件。重命名文件的新名称可能会稍后显示在列表中并重新处理。为什么不在(abc*)中为/D%%a添加呢…
?子字符串只能用于环境变量。不能将它们与FOR
变量一起使用。FOR/f“delims=“%%A in('Dir/B/AD*^ | findstr/vi“^abc”')do(命令)
为什么不FOR/D%%A in(abc*)do…
?子字符串只能用于环境变量。不能将它们与FOR
变量一起使用。FOR/f“delims=“%%A in('Dir/B/AD*^ findstr/vi“^abc”)do(commands)
若要拥有不以abc
开头的文件夹,应使用findstr/v
开关。@LotPings谢谢,我错过了not
。编辑(但使用了不同的方法)以使文件夹不是以abc
开头的。您应该使用findstr/v
开关。@LotPings谢谢,我错过了not
。编辑(但使用了不同的方法)
for %%a in (*) do (
echo %%a|findstr /ib "abc" || (
echo Do commands with '%%a'
)
)
for /f "eol=: delims=" %%F in ('dir /b * ^| findstr /vbi abc') do (
REM your commands processing file %%F here
)