Windows 7 CMD:处理文件夹时忽略以“。”开头的文件夹。

Windows 7 CMD:处理文件夹时忽略以“。”开头的文件夹。

我想查找名称以.FOR让我使用通配符:

for /D %%f in ("fld-*") do set FOLDER=%%f

但是,有以下文件夹:

.fld-blah\
fld-blahblah\
afld-blah\

它还(有点出乎意料地)找到了一个以““。

我决定使用 DOS 测试第一个字符左边运算符。这似乎不适用于FOR变量(%%F此处),所以我需要先将其分配给普通变量。运行以下.bat文件两次(您将看到原因):

@echo off 
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      %TEST%
echo TEST[0,1]: %TEST:~0,1%
echo.
)

产生以下输出:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:
TEST[0,1]: ~0,1

f:         .fld-blah
TEST:
TEST[0,1]: ~0,1


C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah
TEST:      .fld-blah
TEST[0,1]: .

f:         .fld-blah
TEST:      .fld-blah
TEST[0,1]: .

TESTFOR (...)似乎仅在命令组完成后才被分配。

那么。有人能告诉我吗:

  1. 我是否可以让for通配符忽略以点开头的文件夹名称?
  2. 是否存在可以用来将运算LEFT符应用于for变量的语法%%F
  3. 是否有办法分配变量(...)在循环内使用它
  4. 是否还有其他方法可以用来实现我的目标(在 DOS 中,我知道我可以使用 Powershell、cygwin 等)?

答案1

我已经研究了几个小时了,我才意识到我需要用 Google 搜索什么。

答案是使用延迟变量扩展,因此test.bat脚本变成:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION
for /D %%f in ("fld-*") do (
set TEST=%%f
echo f:         %%f
echo TEST:      !TEST!
echo TEST[0,1]: !TEST:~0,1!
echo.
)

并按要求行事:

C:\Users\Bob\Desktop\test>test.bat
f:         fld-blahblah"
TEST:      fld-blahblah
TEST[0,1]: f

f:         .fld-blah"
TEST:      .fld-blah
TEST[0,1]: .

相关内容