Batch file 批量列出属于每个用户的特定txt或日志文件的所有者和大小(csv格式)
我需要生成一个csv文件,其中包含每个用户的特定文件(文本或日志文件)的所有者和大小。要获取此信息,我需要转到C:\Users\并为每个用户转到一个路径(所有用户都相同),然后找到一个特定的文件,该文件的扩展名可以是.log或.txt。然后我需要将文件的所有者和文件大小写入csv文件 我有下面的批处理脚本,但它显示了目录下的路径、文件名和大小。有人能帮我满足以上要求吗Batch file 批量列出属于每个用户的特定txt或日志文件的所有者和大小(csv格式),batch-file,Batch File,我需要生成一个csv文件,其中包含每个用户的特定文件(文本或日志文件)的所有者和大小。要获取此信息,我需要转到C:\Users\并为每个用户转到一个路径(所有用户都相同),然后找到一个特定的文件,该文件的扩展名可以是.log或.txt。然后我需要将文件的所有者和文件大小写入csv文件 我有下面的批处理脚本,但它显示了目录下的路径、文件名和大小。有人能帮我满足以上要求吗 @ECHO OFF SetLocal EnableDelayedExpansion (for /r %%a in (*) do
@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
请知道,仅提供剪切粘贴代码和需求列表的问题通常不会得到回答,但这可能会向您展示一些基本知识。它将每个日志或txt文件的用户名、文件名、文件大小写入Users目录中的output.txt。您可以将其修改为仅列出用户名和文件大小。注意:文件大小以字节为单位 您发布的代码针对它开始的目录和所有子目录中的所有文件运行。它可能会被修改为只返回您感兴趣的路径中指定文件所需的数据,但我无法做到这一点,而且对于不了解批处理的人来说,它是无法识别的。这是更长的,但你将能够遵循。下面解释一下
@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或日志扩展名)和从用户目录运行到要检查的文件所在目录的“某个随机路径”
For/d循环遍历每个用户目录(%%G),在您设置的文件路径中查找txt或日志文件,如果找到文件(如果存在),则文件名存储在var“filename”中。接下来,如果找到一个文件--filename varnotempty--(1)pushd进入文件所在的目录,(2)For%%a提取文件大小(%zA),(3)使用echo,用户名(对应于用户目录--%%G)、文件名和文件大小写入output.txt,然后(4)popd在下一次迭代中返回到用户目录。这在PowerShell中会简单得多。