Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件中if语句中的通配符_Batch File - Fatal编程技术网

Batch file 批处理文件中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

我正在使用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)

仅给出一个替代方案而不使用临时变量(因此不需要):

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
)