我有一个名为Folder1的文件夹。 Inside Folder1中有一些子文件夹(a,b,c,d,e ...)在每个子文件夹中,所有子文件夹(test.log)中都有一个同名的日志文件。每个日志文件的大小都不同。我需要生成一个csv文件,其中包含每个用户w.r.t特定日志文件的子文件夹名称和大小。
例如:我的输出应该是
180
b 220
c 450
我尝试在Google上搜索代码。
@ECHO OFF
SetLocal EnableDelayedExpansion
rem To put the sub-folder names inside the Folder1 into a text file try.txt
pushd C:\....\Folder1\*
for /f "delims=" %%f in ('dir /b /ad') do echo %%f >> try.txt
popd
rem To put the values inside a text file(try.txt) into a variable %Build% (but the values are place horizontally with spaces; it is not inserting vertically)
pushd C:\....\Folder1\try.txt\*
for /f "delims=" %%f in (try.txt) do set Build=!Build!%%f
popd
echo %Build%'\n' >> bb.log
我的想法是将子文件夹名称放在名为try.txt的文本文件中,并将文本文件中的值放入可变的%Build%中。然后转到日志文件所在的路径以获取大小。如下。
for /f %%i in ("C:\....\Folder1\%Build%\....\test.log") do set "size=%%~zi" >> output.csv
请帮助我,因为我是批处理脚本的新手。
如果条件如下所示,如何修改相同的脚本。
C:\Users\<username>\AppData\Roaming\sys.log
where my output should be:
<username1> sys.log file size (for each usernames under C:\Users)
<username2> sys.log file size
<username3> sys.log file size
答案 0 :(得分:1)
我认为以下内容应该有效:
@echo off
setlocal enabledelayedexpansion
if "%~1" equ "" (echo %~0: error: missing base directory.& exit /b 1)
set files=
for /f "delims=" %%i in ('dir /b "%~1\*"') do set files=!files! %~1\%%i\test.log
for %%i in (!files!) do echo %%i,%%~zi
exit /b 0
我已经在第一个参数上参数化了基本目录,因此您可以按如下方式调用它,假设您已将脚本保存为size.bat,位于Folder1上方的目录中:
size.bat Folder1
更新:让我知道这是否有效:
@echo off
setlocal enabledelayedexpansion
if "%~1" equ "" (echo %~0: error: missing prefix.& exit /b 1)
if "%~2" equ "" (echo %~0: error: missing suffix.& exit /b 1)
for /f "delims=" %%i in ('dir /b "%~1\*"') do (
set infix=%%~i
set file=%~1\!infix!\%~2
for %%j in ("!file!") do set size=%%~zj
echo !infix!,%~nx2,!size!
)
exit /b 0
我现在也对后缀进行了参数化,并重新设计了第一个(现在只有)for循环以完全处理每个文件,然后再转到下一个文件,而不是构建一个以空格分隔的文件列表。这种新设计的优点是应该正确处理路径名(前缀,后缀或中缀)中的空格。
您可以按如下方式调用此新脚本:
size.bat C:\Users AppData\Roaming\sys.log
答案 1 :(得分:1)
我只想介绍一种使用Powershell的不同方法。
# Easy way
dir C:\Users\*\AppData\Roaming\sys.log | Select-Object Fullname, Length
# What you asked for
dir c:\users | ForEach-Object{ $_.name + " " + (dir "$_\AppData\Roaming\sys.log").Length }
如果您刚刚开始使用批处理文件,请花一点时间来探索PowerShell。这个例子对批处理文件来说并不算太糟糕。但是我看到你将数据转储到文件中只是为了在以后的命令中处理。我认为你会发现powershell处理对象和枚举事物集合的方式很有价值。