Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批量列出属于每个用户的特定txt或日志文件的所有者和大小(csv格式)_Batch File - Fatal编程技术网

Batch file 批量列出属于每个用户的特定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

我需要生成一个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

请知道,仅提供剪切粘贴代码和需求列表的问题通常不会得到回答,但这可能会向您展示一些基本知识。它将每个日志或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中会简单得多。