有没有办法解决这个推送错误?

时间:2016-02-01 10:24:36

标签: windows batch-file cmd pushd

尽管没有记录,pushd接受通配符(当启用命令扩展时)。但是不能像我期望的那样工作并且看起来像马车。当传递wildcard表达式时,pushd会获取所有文件(!)和按字母顺序应用该模式的文件夹,并尝试输入列表中的第一项 - 而不检查它是文件夹还是文件:

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%

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

1 个答案:

答案 0 :(得分:3)

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

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