尽管未记录,pushd接受通配符(打开命令扩展名时)。但是它没有按我预期的那样工作,似乎有故障。传递wildcard表达式后,插入将按字母顺序应用模式的所有文件(!)和文件夹,并尝试输入列表中的第一项-而不检查它是文件夹还是文件:

C:>break>a1

C:>md a2

C:>pushd "a*"
The directory name is invalid.

C:>md b1

C:>pushd "b>"

C:\b1>

有没有办法强制pushd进入第一个目录,就像传递的通配符表达式一样.b*\b*\nul之类的东西不起作用。
看起来唯一的方法是使用DIR命令列出目录,获取第一个目录,然后将其传递给pushd:
@echo off

set "mask=b?"

for /f "tokens=*" %%# in ('dir /b /a:d /o:-n "%mask%"') do @set the_dir=%%#

pushd %the_dir%

但这看起来不方便从命令行使用。

最佳答案

有趣的!我刚刚测试了cd命令,它的工作方式相同。没有办法对名称进行“排序”,因此文件夹名称位于文件名称之前,但是如果所有文件夹都没有扩展名并且所有文件都具有扩展名,则可以使用undocumented "<" wild-card这样做:

break > a1.txt
md a2
pushd "a<"

10-07 18:45