我正在尝试编写一个脚本,我必须使用以下逻辑列出文件夹中的所有文件夹:
假设文件夹A,B,C在文件夹F中 和A,B和C包含子文件夹和文件。
我必须编写一个脚本,将文件夹A,B,C显示为标题,然后在其中列出指定大小以上的文件(包括子文件夹)...如果可能的话,修改日期。
我准备了一个骨架。
@echo off& setLocal EnableDelayedExpansion 推送C:\ F
for / f“tokens = * delims =”%% a in('dir / b / a:d')do(
echo %%a >>C:\F\list.txt
echo "-----------------------------------------------">>C:\F\list.txt
pushd %%a
for /f "tokens=* delims= " %%i in ('dir/b/s') do (
echo %%i >>C:\F\list.txt
if %%~Za gtr 10000 echo %%i is %%~Za >>C:\F\list.txt
))
所需的输出是:
file1 size1 date1
file2 size2 date2
file3 size3 date3
file4 size4 date4
file5 size5 date5
file6 size6 date6
---日期字段不是强制性的,但如果包括在内则更好。
谢谢&问候
答案 0 :(得分:1)
以下是代码的一般概念。它基本上搜索每个目录和子目录,并查找指定类型的所有文件。然后程序找到每个唯一的文件目录,并搜索大于指定大小的文件,以您请求的格式输出。注意:代码中包含许多“额外”以进行故障排除。随意删除不必要的文本文件。 =]
@echo off & setLocal EnableDelayedExpansion pushd C:\F
::sets size limit
SET sizelimit=10000
::searches for all files in directories and subdirectories and outputs to files.txt
dir /b/s >> files.txt
::finds all .zip files in files.txt
type files.txt | findstr /E .zip > myfile1.txt
::finds all .zip file locations and unique file locations
FOR /F "tokens=* delims=\" %%a in (myfile1.txt) do @echo %%~dpa >>filelocations.txt
FOR /F "delims==" %%L in (filelocations.txt) do find "%%L" unique.txt>nul || echo %%L>>unique.txt
::Loops through each unique location, finds all the .zip files and checks if they are larger
:: than the specified file size, then outputs the results to output.txt
FOR /F "tokens=* delims= " %%a in (unique.txt) do (
echo %%a >>output.txt
findstr "%%a" myfile1.txt >temp.txt
FOR /F "tokens=* delims=" %%a in (temp.txt) do (
if %%~za gtr %sizelimit% echo %%~nxa %%~za %%~ta >>output.txt
)
)
end local
::Cleans up extra files (which are generated for troubleshooting purposes)
del files.txt myfile1.txt filelocations.txt unique.txt temp.txt
答案 1 :(得分:0)
好吧,您可以将输出传递给sort
,但至少有三个问题。
第一个问题是,当你把它粘到最后时,它一次只排序一行。意思是它根本不排序。要解决这个问题,您可以将整个for
命令放在块()
中,然后将块的输出传递给sort
,这会导致其他问题,但我相信它是可能的解决这些问题。
第二个问题是它按字母顺序排序,从月份开始。这意味着所有Januaries 1/dd/yyyy
将首先出现,然后所有Octobers 10/dd/yyyy
意味着您将所有年份混合在一起,并且它分为1月,10月,11月,12月,2月,3月等。< / p>
您可以使用sort
的{{1}}命令按大小排序,但您将/+col
比较size[tab]filename
2[tab]hello
来自1000[tab]hello
。 (键入sort /?
ENTER 以了解有关排序的更多信息。)
我建议使用dir
的能力进行排序:
:: Sort by name
FOR /F "tokens=* delims= " %%a in ('dir /b /o:n ') do @if %%~za gtr %sizelimit% echo %%~ta%tab%%%~za%tab%%%~nxa
:: Sort by size
FOR /F "tokens=* delims= " %%a in ('dir /b /o:s ') do @if %%~za gtr %sizelimit% echo %%~ta%tab%%%~za%tab%%%~nxa
:: Sort by date
FOR /F "tokens=* delims= " %%a in ('dir /b /o:d ') do @if %%~za gtr %sizelimit% echo %%~ta%tab%%%~za%tab%%%~nxa
/o:
订单命令还有其他选项。在命令提示符下键入dir /?
ENTER ,以获取有关dir
如何工作的更多信息。