Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 通过.bat迭代目录中的特定文件_Windows_Batch File_Console - Fatal编程技术网

Windows 通过.bat迭代目录中的特定文件

Windows 通过.bat迭代目录中的特定文件,windows,batch-file,console,Windows,Batch File,Console,我尝试创建bat文件,只通过目录中文件名以特定单词开头的文件进行迭代。 例如: 公司名称.module1.exe 公司名称.module2.dll 我知道如何迭代文件,但不知道如何检查其名称以了解具体情况。将以下内容添加到批处理文件中: for /F "eol=: tokens=*" %%A in ('dir /A-D /B "companyName*"') do (echo %%~fA) 此脚本将echo当前工作目录中以companyName前缀开头的所有文件(仅文件)。将echo替换为要执

我尝试创建bat文件,只通过目录中文件名以特定单词开头的文件进行迭代。 例如:
公司名称.module1.exe
公司名称.module2.dll


我知道如何迭代文件,但不知道如何检查其名称以了解具体情况。

将以下内容添加到批处理文件中:

for /F "eol=: tokens=*" %%A in ('dir /A-D /B "companyName*"') do (echo %%~fA)
此脚本将
echo当前工作目录中以companyName前缀开头的所有文件(仅文件)。将
echo
替换为要执行的任何其他命令

更新1:要查看其他目录,您可以

for /F "eol=: tokens=*" %%A in ('dir /A-D /B "pathToLookIn/companyName*"') do (echo %%~fA)

其中路径tolookin是完全限定或相对路径


更新2:我已经更新了
for/F
循环,以处理以
开头的文件名正如@dbenham所建议的。

如果您知道如何迭代文件,那么只需使用这些知识:

for %%f in (companyName*) do (
  ...
)

请注意,迭代
dir
的输出容易出错,在许多情况下会损坏Unicode字符。由于
for
能够直接进行迭代,因此很少需要使用较低的选项。

您的代码工作得很好,但当我想使用特定目录时,它会占用所有文件。我对('dir/B“Company*”/B D:\DLLS\current')中的/F“tokens=*”%%A使用下一个命令做(ECHO%%A)哪里出错了?如何将当前工作目录更改为特定目录?我已经找到了答案。我用CD命令更改了当前目录。谢谢您的回答。@Polaris您可能永远不会有问题,但从技术上讲,文件名可以以
开头,在这种情况下,由于默认的/F EOL选项,它将被跳过。对于/F“eol=:tokens=*”
或对于/F“eol=:delims=”
,使用
。这是因为有效的Windows路径(或文件名)永远不能以
开头。你比我快了几秒钟:)就/F。。。('DIR…')仅在DO子句修改目录列表时才需要。SimpleFor语句是不确定的,它可能看到也可能看不到更改。FOR/F版本在处理DO子句之前缓冲DIR的输出,因此它将始终与任何更改隔离。啊,感谢您的注意。这是一个我从未想过的限制,但我经常遇到Unicode(光栅字体)。
for %%f in (companyName*) do (
  ...
)