我想查找名称以響.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]: .
TEST
FOR
(...)
似乎仅在命令组完成后才被分配。
那么。有人能告诉我吗:
- 我是否可以让
for
通配符忽略以点开头的文件夹名称? - 是否存在可以用来将运算
LEFT
符应用于for
变量的语法%%F
? - 是否有办法分配变量和
(...)
在循环内使用它 - 是否还有其他方法可以用来实现我的目标(在 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]: .