Неверная математика пакетного скрипта

batch-file #variables #math

#пакетный файл #переменные #математика

Вопрос:

У меня есть следующий код, который получает размер моей папки загрузок, затем делит ее и устанавливает в переменную. У меня есть еще 7 таких строк, которые работают, но эта не работает.

%div2% отображается пустым.

Кто-нибудь видит, что я сделал не так?

 @echo off
setlocal enableextensions disabledelayedexpansion

set "target2=C:Users%USERNAME%Downloads"
if not defined target2 set "target2=C:Users%USERNAME%Downloads"

set "size2=0"
for /f "tokens=3,5" %%a in ('
    dir /a /s /w /-c "%target2%"
    ^| findstr /b /l /c:"  "
') do if "%%b"=="" set "size2=%%a"  


SET /A %size2%/1048576

SET /A div2=%size2%/1048576

echo  %DIV2%

pause
 

Комментарии:

1. Пожалуйста, откройте командную строку , запустите set /? и прочитайте выводимую справку. Это может быть полезно использовать set /A size/=1048576 и set /A div2=size/1048576 . Но, пожалуйста, обратите внимание, что cmd.exe для арифметических выражений поддерживаются только 32-разрядные целые числа со знаком, что означает числа в диапазоне -2147483648 до 2147483647 . Нет поддержки чисел, превышающих 2 гигабайта, и нет поддержки арифметики с плавающей запятой.

2. Еще несколько советов: set "target2=C:Users%USERNAME%Downloads" лучше записать как set "target2=%USERPROFILE%Downloads" . Запустите в окне командной строки reg query "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders" и далее reg query "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" , и вы знаете причину. Следующая строка с if условием никогда не является истинной и поэтому совершенно бесполезна. Надеюсь, этот пакетный файл написан только для вас, поскольку Downloads каталог может быть настроен на любой каталог, который хочет пользователь.

3. Я надеялся, что математика сократит число, чтобы его можно было использовать. Это около 7 ГБ. Скрипт просматривает все перечисленные мной папки, затем получает размер и добавляет их, а затем отображает сообщение, в котором говорится, что общее количество папок, например, составляет 19,3 ГБ

4. Что ж, если файлы в каталоге занимают вместе более 2 гигабайт, выбор использования пакетного файла, обработанного cmd.exe для получения используемого пространства в МБ, МБАЙТ, ГБ или гигабайт, не был хорошим. Я предлагаю в этом случае выполнить задачу с помощью сценария PowerShell, интерпретируемого PowerShell. PowerShell является специализированным преемником командного процессора Windows и не имеет таких ограничений на математические операции , как cmd.exe . С помощью строковых операций перед арифметическими выражениями можно получить результат в МБ / ГБ MiB / GiB с помощью пакетного кода, но это не будет точным.

5. Не стесняйтесь обращаться к Powershell, чтобы он посчитал за вас. Пример: for /f "delims=" %%G IN ('powershell 7000000000 / 1048576') do set "result=%%G"