Batch file 列出不以开头的目录

Batch file 列出不以开头的目录,batch-file,cmd,Batch File,Cmd,我想回显所有不以字母开头的目录。我写了以下代码片段 @echo off for /d %%g in (*) do ( echo %%~nxg ) 它会打印出所有的目录。我应该如何过滤掉那些以a开头的?我正在尝试使用IF语句执行某些操作,但失败得很惨。要使用IF执行此操作,请尝试以下操作: @ECHO OFF SetLocal EnableDelayedExpansion FOR /D %%g IN (*) DO ( SET tmp=%%~nxg IF NOT "!tm

我想回显所有不以
字母开头的目录。我写了以下代码片段

@echo off

for /d %%g in (*) do (
    echo %%~nxg
)

它会打印出所有的目录。我应该如何过滤掉那些以
a开头的
?我正在尝试使用IF语句执行某些操作,但失败得很惨。

要使用
IF
执行此操作,请尝试以下操作:

@ECHO OFF
SetLocal EnableDelayedExpansion
FOR /D %%g IN (*) DO (
    SET tmp=%%~nxg
    IF NOT "!tmp:~0,1!"=="a" (
        ECHO %%~nxg
    )
)

输出过滤

dir/ad/b | findstr/i/v/b“a”
列出目录(
/ad
)并将(
|
)命令的输出导入到
findstr
,这将选择在开头(
/b
)不包含字符串
“a”
,不区分大小写(
/i
)的行

子字符串

@echo关闭
setlocal enableextensions enabledelayedexpansion
对于(*)中的/d%%a,请执行以下操作(
设置“名称=%%~na”
如果/i不是“!name:~0,1!”==“a”echo%%a
)
for
可替换参数不允许使用子字符串操作,因此需要一个变量。但是,由于变量在一个代码块(括号中的代码)内发生了更改,并且在解析该块时(而不是在执行时)完成了正常的变量扩展,因此需要延迟扩展来从更改的变量中检索(读取)值

此代码的问题是,当文件夹名称包含
时,它将失败因为解析器将在
set
命令中使用它。要处理它,应在需要时启用/禁用延迟扩展

@echo关闭
setlocal enableextensions disabledelayedexpansion
对于(*)中的/d%%a,请执行以下操作(
设置“名称=%%~na”
延迟扩展
对于(“!name:~0,1!”)中的%%b,请执行以下操作(
端部
如果/i不是“%%~b”==“a”回显%%a
)
)
字符删除

@echo关闭
setlocal enableextensions disabledelayedexpansion
对于(*)中的/d%%a,请执行以下操作(
对于/f“代币=*delims=aA”%%b in(“a%%a”)do(
如果/i“%%~b”=“%%~a”回显%%a
)
)

这里使用了/f
,配置为将字母
aA
视为分隔符,但检索所有令牌。这将使/f的
从行首删除所有分隔符(
aA
)。如果剩余数据等于初始数据,则文件夹的名称不会以
a
a

开头,我会尽快接受它(时间限制,嗯?),但这对我来说是新的
SetLocal EnableDelayedExpansion
非常有用的功能。
for /d %%g in (*) do (
    for /f "eol=a tokens=* delims=" %%# in ("%%~nxg") do echo %%~fg
)