我需要为每个用户生成一个包含特定文件(文本或日志文件)的所有者和大小的csv文件。为此,我需要转到C:\ Users \并为每个用户转到一个路径(对所有用户都相同)并找到一个特定文件,该文件可以是.log或.txt扩展名。然后我需要文件的所有者和写入csv文件的文件大小。
我有以下批处理脚本,但它显示了目录下的路径,文件名和大小。有谁可以帮我满足上述要求?
@ECHO OFF
SetLocal EnableDelayedExpansion
(for /r %%a in (*) do for /f "tokens=5" %%b in ('dir /q "%%~fxa" ^| findstr "%%~nxa"') do (
echo "%%~dpa","%%~nxa","%%~za","%%b"
)) > test.csv
答案 0 :(得分:1)
请注意只提供剪切和提示的问题粘贴代码列表的代码通常无法解答,但这可能会向您展示一些基础知识。它将每个日志或txt文件的用户名,文件名,文件大小写入Users目录中的output.txt。您可以将其修改为仅列出用户名和文件大小。注意:文件大小以字节
给出您发布的代码针对其开始的目录和所有子目录中的所有文件进行了运行。它可能会被修改为仅返回您想要的数据,而只返回您感兴趣的路径中的指定文件,但我无法做到这一点 - 对于那些没有&的人来说这是难以理解的。 #39;知道批次。这个时间更长,但您可以关注。它将在下面解释。
@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion
Set "file=FileNameWithoutExtension"
Set "filepath=PathFromUsers\ToFileDir"
:: Go to Users dir and delete old output file
cd %SystemDrive%\Users\
Del output.txt >nul 2>nul
:: Loop through the Users directory
For /d %%G in ("*") do (
Set "filename="
If exist %SystemDrive%\Users\%%G\%filepath%\%file%.txt set filename=%file%.txt
If exist %SystemDrive%\Users\%%G\%filepath%\%file%.log set filename=%file%.log
:: !marks are required to expand variables set inside a loop
If not "!filename!"=="" (
pushd %SystemDrive%\Users\%%G\%filepath%
For %%A in (!filename!) do echo %%G,!filename!,%%~zA >>%SystemDrive%\Users\output.txt
popd
)
)
echo Done!
exit
你需要在顶部设置变量:文件名(没有txt或log扩展名)和"一些随机路径"从Users目录运行到包含您要检查的文件的目录。
For / d循环遍历每个Users目录(%% G),在您设置的文件路径中查找txt或日志文件,如果找到文件(如果存在),则文件名存储在var&#34中;文件名&#34 ;.接下来,如果找到文件 - filename var 不为空 - (1)pushd进入文件所在的目录,(2)For %% A提取文件大小( %% ~zA),(3)使用echo,用户名(对应用户目录 - %% G),文件名和文件大小写入output.txt,然后(4)popd返回到用户目录下一次迭代。