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"