需要帮助编写批处理文件

时间:2018-10-23 10:20:15

标签: windows batch-file

文件夹的路径和格式进入批处理文件的输入 文件(例如txt)(作为批处理文件的参数)。 该文件夹必须包含其他文件。 如果该文件夹不存在,则写“此文件夹不存在”,然后 终止程序。 如果存在这样的文件夹,则在其中及其子文件夹中查找所有内容 安装了指定扩展名的文件 存档属性。输出此类文件的数量 控制台

[编辑/]

这就是我所拥有的:

@echo off
if not exist %1 (echo "This folder does not exist" && pause && exit /B )
set /a count=0
for %%i in (dir %1\*.%2 /A:A /S ) do ( set /a count+=1 )
Echo in the folder %1, found %count% files with extension %2 and attribute 
Archive
pause

最终计数不正确 enter image description here

2 个答案:

答案 0 :(得分:0)

您的for %%i in (dir %1\*.%2 /A:A /S ) do ...行在某些方面是错误的。

您要处理命令的输出:添加/f并将命令单引号引起来。

您计算输出的每一行(包括标题和摘要:添加/b仅列出文件名。

如果您的参数中有空格,它将失败:使用%~n删除所有引号并引用完整路径。

总的来说,该行应该是:

for /f %%i in ('dir /b "%~1\*.%~2" /A:A /S') do ...

有关详细信息,请参见for /?dir /?

(确切地说,您还应该添加"delims="来获取整个文件名,而不只是它的第一个单词,但是由于您只是在数行,因此不会有任何改变)

另一件事:if not exist %1 (echo "This folder does not exist"不理想。如果未提供任何参数,%1为空,则if会产生if not exist (echo(尝试查找名为(echo的文件,并且要执行的命令为{{1 }},导致错误消息"This folder does not exist"

更安全的语法:'"This folder does not exist"' is not recognized as an internal or external command, operable program or batch file.

答案 1 :(得分:0)

此批处理文件对我有用。一个问题是,没有/ B选项,它还会计算目录返回的额外记录。您当前的“ for”实际上是在计算其中的语句部分,而不是运行命令时的实际输出。

@echo off
cls
SETLOCAL EnableDelayedExpansion
if not exist %1 (echo "This folder does not exist" && pause && exit /B )
set /a count=0
for /f "tokens=*" %%G in ('dir "%1\*.%2" /A:A /S /B') do (
    set /a count+=1
)
Echo in the folder %1, found %count% files with extension %2 and attribute Archive
pause