我有一个工作批处理脚本,它计算目录树(包括子目录)中的.txt文件,然后计数GTR比2基本上通知用户他们必须在再次运行此脚本之前做一些事情。
我希望脚本在通知用户时也告诉他们txt文件的文件名。
这就是我所拥有的。
以下检查.txt文件的根文件夹和所有子目录。 这会计算.txt文件的数量并设置它。
@echo off & Setlocal
:: Search for files in the Tree
Set "sFolder=C:\folder\folder\root"
Set "sFileType=txt"
set "i=0"
PushD "%sFolder%" &&(
FOR /R "." %%i IN (*) DO ( If /i "%%~xi"==".%sFileType%" ( set /a i+=1 ) ) )
如果计数高于3 goto notify user(这是简单的echo命令)
If %i% GTR 2 goto NotifyUser
我没有得到的是如何将3个或更多找到的.txt文件名回显给用户。我知道这将是一个变量,但我似乎无法弄清楚如何把它放在上面的命令中。
另外..在回声中,有时文件名可能有一个" 。 "在名称中超过扩展名
IE:filename.txt.gpg
上面的count命令不会将示例文件名计为.txt文件... 但是根据命令回显名称可能会认为这是一个txt文件..我不希望上面的文件名示例作为计数的txt文件之一回显给用户(因为它不计算)。 (希望这很有意义)。
答案 0 :(得分:2)
您可能不想多次扫描.txt文件,因此最简单的解决方案是将文件列表存储在临时文件中,并且当且仅当行数时才输出结果大于2.您可以使用FIND计算行数,使用FOR / F来计算计数结果。
@echo off
setlocal
set "root=C:\folder\folder\root"
set "out=%temp%\myTextFileList.txt"
dir /b /s /a-d "%root%\*.txt" >"%out%"
for /f %%N in ('find /c /v "" <"%out%"') do if %%N gtr 2 (
echo You cannot proceed because you have more than 2 .TXT files:
type "%out%"
del "%out%"
pause
exit /b
)
del "%out%"
REM Rest of script goes here
答案 1 :(得分:0)
如果您想要做的就是回显给您回复的总数的名称,您可以使用:
@echo off & Setlocal
:: Search for files in the Tree
Set "sFolder=C:\temp"
Set "sFileType=txt"
set "i=0"
PushD "%sFolder%" &&(
FOR /R "." %%i IN (*) DO ( If /i "%%~xi"==".%sFileType%" ( set /a i+=1 &echo %%~ni) ) )
答案 2 :(得分:0)
最简单的解决方案可能在@dbenham's answer中提供。但是,我想在不使用临时文件的情况下给出答案,但是(a)存储文本文件列表的变量。
以下脚本基于您的for /R
方法,并建立以逗号分隔的已发现*.txt
文件列表(每个文件都包含在""
中)并将其存储在变量{ {1}}。标准ITEMS
循环用于在金额超过预定义限制时显示列表项。这是:
for
由于环境变量的大小和命令行的长度是有限的(在Windows 7 x64上,我认为是8191字节),对于找到的大量@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Define constants here:
set "LOCATION=.."
set "PATTERN=*.txt"
set /A LIMIT=2
set /A COUNT=0
set "ITEMS="
pushd "%LOCATION%" && (
for /R "." %%F in ("%PATTERN%") do (
set /A COUNT+=1
set "ITEM=%%~F"
setlocal EnableDelayedExpansion
for /F "delims=" %%S in ("!ITEMS!"!ITEM!",") do (
endlocal
set "ITEMS=%%S"
)
)
popd
)
if %COUNT% GTR %LIMIT% (
echo Cannot continue script, too many "%PATTERN%" files ^(%COUNT%^) encountered:
for %%F in (%ITEMS%) do (
echo(%%~F
)
exit /B
)
rem Continue script here...
endlocal
exit /B
文件,此方法可能会失败。
此脚本略有不同,使用类似于数组的变量*.txt
,ITEM[1]
,ITEM[2]
等来存储遇到的ITEM[3]
文件(每个文件一个)。< / p>
*.txt
这里的环境大小(包含所有环境变量的空间)是限制;我不知道限制,但应该相当高。