【问题标题】:repeating variable issue in windows batch fileWindows批处理文件中的重复变量问题
【发布时间】:2013-07-16 04:32:52
【问题描述】:

我在批处理文件中有以下代码:

    set /p user="Enter username: " %=%
    cd w:\Files
    @echo off 
    setLocal EnableDelayedExpansion 
    set /a value=0 
    set /a sum=0 
    set /a valA=0
    FOR /R %1 %%I IN (*) DO ( 
    set /a value=%%~zI/1024 
    set /a sum=!sum!+!value! 
    set /a sum=!sum!/1024
    ) 
    @echo Size of "FILES" is: !sum! MB
    @echo off
    FOR /R %1 %%I IN (*) DO ( 
    set /a sum=!sum!/1024
    set /a valA=!sum!
    )
    @echo Size of "FILES" is: !sum! GB


    cd W:\Documents and Settings\%user%\Desktop
    @echo off 
    setLocal EnableDelayedExpansion 
    set /a value=0 
    set /a sum=0 
    set /a valB=0
    FOR /R %1 %%I IN (*) DO ( 
    set /a value=%%~zI/1024 
    set /a sum=!sum!+!value! 
    set /a sum=!sum!/1024
    ) 
    @echo Size of Desktop is: !sum! MB
    @echo off
    FOR /R %1 %%I IN (*) DO ( 
    set /a sum=!sum!/1024
    set /a valB=!sum!
    )
    @echo Size of Desktop is: !sum! GB

它还会检查其他几个文件夹,但您应该明白。

我得到这个输出:

C:\Users\pprescott\Desktop>cd w:\Files
Size of "FILES" is: 215 MB
Size of "FILES" is: 0 GB
Size of Desktop is: 215 MB
Size of Desktop is: 0 GB
Size of Favorites is: 215 MB
Size of Favorites is: 0 GB
Size of Documents is: 215 MB
Size of Documents is: 0 GB
Total size is: 0 MB
Total size is: 0 GB
Press any key to continue . . .

这旨在计算旧 xp 机器上的文件夹大小,以准备数据传输。 xp机器映射到W盘。

【问题讨论】:

  • 那么问题/问题是什么?
  • 我想我正在寻求帮助。如果您在输出中注意到,它会重复批处理文件第一部分的结果。
  • 请显示您用来调用批处理的命令行。
  • 批处理只是在 Windows 资源管理器中单击
  • 请显示快捷方式的属性(命令行等)。

标签: math windows-7 batch-file cmd


【解决方案1】:

尝试删除for /r参数%1

FOR /R %%I IN (*) DO (

试试这个代码:

@ECHO OFF &SETLOCAL
FOR /R "w:\Files" %%I IN (*) DO set /a asum+=%%~zI
SET /a sum=asum/1048576
echo Size of "FILES" is: %sum% MB
set /a sum=asum/1073741824
echo Size of "FILES" is: %sum% GB
FOR /R "W:\Documents and Settings\%user%\Desktop" %%I IN (*) DO set /a asum+=%%~zI
SET /a sum=asum/1048576
echo Size of "DESKTOP" is: %sum% MB
set /a sum=asum/1073741824
echo Size of "DESKTOP" is: %sum% GB

【讨论】:

  • 这似乎并没有改变任何东西。老实说,我复制并粘贴了很多内容,所以我不确定某些部分的作用。
  • @endoro 记住 31 位的限制 - 当总大小超过 2Gb 时会发生什么?
  • 无效号码。数字被限制为 32 位精度。 “文件”的大小是:-1990 MB “文件”的大小是:-1 GB 按任意键继续。 . .
  • 当总大小超过 2Gb 时,您应该跳到 Linux :),您可以批量处理 nothing。使用VBSPowershell
  • 这些文件夹可以轻松包含多达 60 GB。我害怕我不得不和别的东西一起去。 :/我对powershell或vb不太熟悉。有人可以帮帮我吗?
【解决方案2】:

使用dir 命令输出。看这个例子

这将获取文件夹大小并将其转换为不同的值。 请注意,转换仅适用于最大 2 GB 的数值。

@echo off
for /f "tokens=3" %%A IN ('dir /s /-c ^| find /i "bytes" ^| find /v /i "free"') do set T=%%A

echo Bytes = %T%
set /a T/=1024
echo Kilobytes = %T%
set /a T/=1024
echo Megabytes = %T%
set /a T/=1024
echo Gigabytes = %T%

输出:

C:\Users\User\Desktop>Test.bat
Bytes = 18280552
Kilobytes = 17852
Megabytes = 17
Gigabytes = 0

【讨论】:

    【解决方案3】:

    这应该以字节为单位报告树的大小,最大为 999 GB。

    较低的答案使用 VBS 脚本将数字转换为 GB(删除小数)

    @echo off
    call :size "w:\Files"
    call :size "W:\Documents and Settings\%user%\Desktop" 
    pause
    goto :eof
    :size
    for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s) "') do set "n=%%b"
    for /f "tokens=1-4 delims=," %%c in ("%n%") do (
    echo %%c%%d%%e%%f "%~1"
    )
    )
    

    返回大约 GB 数字的解决方案

    @echo off
    call :size "w:\Files"
    call :size "W:\Documents and Settings\%user%\Desktop" 
    pause
    goto :eof
    :size
    for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s) "') do set "n=%%b"
    for /f "tokens=1-4 delims=," %%c in ("%n%") do (
    
    >"%temp%\VBS.vbs" echo Set fso = CreateObject^("Scripting.FileSystemObject"^) : Wscript.echo ^(%%c%%d%%e%%f/1024/1024^)
    for /f "tokens=1 delims=." %%z in ('cscript /nologo "%temp%\VBS.vbs"') do echo %%z GB "%~1"
    del "%temp%\VBS.vbs"
    
    )
    )
    

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2020-02-13
      • 2018-01-07
      • 2010-10-03
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多