Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 3

Автор: mcTNT2
Дата сообщения: 23.06.2007 00:17
Небольшой кусок кода по выводу размера файла:

set FILE=c:\myfile.zip
for %%a in (%FILE%) do set SIZE=%%~za
echo Bytes: %SIZE%

Как можно отделить в выводе тысячи пробелом для лучшей читабельности,
т.е. вместо Bytes: 1048576 выводить Bytes: 1 048 576?
Автор: ViSiToR
Дата сообщения: 23.06.2007 00:46
mcTNT2

Цитата:
Как можно отделить в выводе тысячи пробелом для лучшей читабельности?

Тут скорее речь о миллионах

Примерно так (нужно предусмотреть мне кажется все возможные варианты) :


Код: Set FILE=c:\myfile.zip

For %%a in (%FILE%) Do Set SIZE=%%~za
If %SIZE% GEQ 1000000 (
    Set SIZE=%SIZE:~0,1% %SIZE:~1,3% %SIZE:~-3%
    ) Else If %SIZE% GEQ 100000 (
    Set SIZE=%SIZE:~0,3% %SIZE:~-3%
    ) Else If %SIZE% GEQ 10000 (
    Set SIZE=%SIZE:~0,2% %SIZE:~-3%
    ) Else If %SIZE% GEQ 1000 (
    Set SIZE=%SIZE:~0,1% %SIZE:~-3%
    ) Else If %SIZE% LEQ 100 (
    Set SIZE=%SIZE%)

Echo Bytes: %SIZE%
Автор: Elroir
Дата сообщения: 23.06.2007 01:16
ViSiToR
Не.. плохо работает

mcTNT2
Вот такой вариант:

Код:
set FILE=c:\myfile.zip
for %%a in (%FILE%) do set SIZE=%%~za
if not "%SIZE:~-10,-9%"=="" (set SIZE=%SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-7,-6%"=="" (set SIZE=%SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-4,-3%"=="" (set SIZE=%SIZE:~-6,-3% %SIZE:~-3%)
))
echo Bytes: %SIZE%
Автор: ViSiToR
Дата сообщения: 23.06.2007 01:39
Elroir

Цитата:
Не.. плохо работает

Согласен, не идеально, поэтому и написал...


Цитата:
Примерно так




Цитата:
Вот такой вариант:

Да, это оно, работает как часики... правда вот с таким числом этот пример не справляется - 1000000000000, на выходе имеем 000 000 000 000

Автор: Elroir
Дата сообщения: 23.06.2007 01:43
ViSiToR

Цитата:
вот с таким числом этот пример не справляется

Я предположил, что файлов размером в терабайт у него не будет
Автор: ViSiToR
Дата сообщения: 23.06.2007 02:47
Elroir


Цитата:
Я предположил, что файлов размером в терабайт у него не будет

Терабайт - не, вот число (в байтах) которое является 999 гигабайтов - 1072668082176 (999 * 1024 * 1024 * 1024), с твоим примером, получается это:


Код: Bytes: 072 668 082 176
Автор: Elroir
Дата сообщения: 23.06.2007 02:58
ViSiToR
Прав - крыть нечем
Будем исправляться:

Код:
set FILE=c:\myfile.zip
for %%a in (%FILE%) do set SIZE=%%~za
if not "%SIZE:~-13,-12%"=="" (set SIZE=%SIZE:~-15,-12% %SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-10,-9%"=="" (set SIZE=%SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-7,-6%"=="" (set SIZE=%SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-4,-3%"=="" (set SIZE=%SIZE:~-6,-3% %SIZE:~-3%)
)))
echo Bytes: %SIZE%
Автор: ViSiToR
Дата сообщения: 23.06.2007 03:28
Elroir
О! отлично!

Занёс в шапку, правда весь пример может стоило бы привести в косметическо-понятный вид?
А также сделать возможность заранее подставлять разделитель для чисел.

Вот примерно так:


Код: @Echo Off
Set FILE=%WinDir%\Notepad.exe
Set "DELIM=,"

For %%i In ("%FILE%") Do Set SIZE=%%~zi

If Not "%SIZE:~-13,-12%"=="" (
    Set SIZE=%SIZE:~-15,-12%%DELIM%%SIZE:~-12,-9%%DELIM%%SIZE:~-9,-6%%DELIM%%SIZE:~-6,-3%%DELIM%%SIZE:~-3%
) Else If Not "%SIZE:~-10,-9%"=="" (
    Set SIZE=%SIZE:~-12,-9%%DELIM%%SIZE:~-9,-6%%DELIM%%SIZE:~-6,-3%%DELIM%%SIZE:~-3%
) Else If Not "%SIZE:~-7,-6%"=="" (
    Set SIZE=%SIZE:~-9,-6%%DELIM%%SIZE:~-6,-3%%DELIM%%SIZE:~-3%
) Else If Not "%SIZE:~-4,-3%"=="" (
    Set SIZE=%SIZE:~-6,-3%%DELIM%%SIZE:~-3%
)

Color A
Echo Size of File [%FILE%] in Bytes is: %SIZE%
Pause > Nul
Автор: Maza Faka
Дата сообщения: 23.06.2007 07:33
vmix
Elroir
ViSiToR

Цитата:
вместо Bytes: 1048576 выводить Bytes: 1 048 576?

Можно так:

Код:
@echo off
set FILE=c:\myfile.zip
for /f "tokens=3" %%a in ('dir %FILE% ^| find /i "myfile.zip"') do set size=%%a
echo Bytes: %size%
Автор: wolf0425
Дата сообщения: 23.06.2007 08:10
igor_andreev
Цитата:
Я такую задержку обычно вижу невооруженным глазом.
вот я и поразился, что у этой программы задержка в десятые - была видна и повторяема, а у sbs2, запускаемой попеременно - не видна.
А через час - и у этой задержка пропала до совершенно невидимой, я никаких пифов за это время не делал и вообще ничего на компе не менял, лазил по сайтам.
антивирус так чудит, что-ли...
Автор: mcTNT2
Дата сообщения: 23.06.2007 09:37
ViSiToR
Elroir
Maza Faka

Какая оживленная дискуссия получилась
Сначала пошли "в лоб", но Maza Faka свел всё к захвату вывода dir, умно!
Правильный вариант получается примерно таким:

Код:
set FILE=c:\myfile.zip
for %%a in (%FILE%) do for /f "tokens=3" %%b in ('dir %FILE% ^| find /i "%%~nxa"') do set SIZE=%%b
echo Bytes: %SIZE%
Автор: wolf0425
Дата сообщения: 23.06.2007 10:06

Цитата:
де можно почитать про переменные вида %VAR:~-x,-y%
set /?
Автор: mcTNT2
Дата сообщения: 23.06.2007 10:09
wolf0425
Сколько раз смотрел, но не видел...
Автор: GORA2
Дата сообщения: 23.06.2007 10:15
igor_andreev
Начну с благодарности за файлик "test.txt". Все работает.
ViSiToR
Правда немного поменял: байты 2F заменил на 2E в первых двух строках, и
Код: For /F "usebackq delims=" %%i In (`NOW.COM`) Do Set NowTime=%%i
Автор: igor_andreev
Дата сообщения: 23.06.2007 10:42
GORA2

Цитата:
Правда немного поменял: байты 2F заменил на 2E в первых двух строках, и

А ежли заменить в первых двух строчках 3A и 2F на 20, то наверно получится то, что ты хотел от d_t.com ?
Автор: GORA2
Дата сообщения: 23.06.2007 12:15
igor_andreev
Цитата:
А ежли заменить в первых двух строчках 3A и 2F на 20, то наверно получится то, что ты хотел от d_t.com ?
Не совсем, мне еще столетие приходиться досчитывать, но за подсказку спасибо. От слешей ушел, а вот все заменить на пробелы не догадался .
Автор: Elroir
Дата сообщения: 23.06.2007 12:20
GORA2

Цитата:
а вот его бы еще дополнить выравниванием чисел по "правому краю". Удобочитаемость выводимых таким образом в столбик чисел значительно возрастает.

Добавляются две строчки:

Код:
@echo off
for %%a in (1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567890 12345678901 123456789012 1234567890123 12345678901234 123456789012345) do (
set SIZE=%%~a
call :show
)
goto :EOF
:show
if not "%SIZE:~-13,-12%"=="" (set SIZE=%SIZE:~-15,-12% %SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-10,-9%"=="" (set SIZE=%SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-7,-6%"=="" (set SIZE=%SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%) else (
if not "%SIZE:~-4,-3%"=="" (set SIZE=%SIZE:~-6,-3% %SIZE:~-3%)
)))
set "SIZE= %SIZE%"
set "SIZE=%SIZE:~-19%"

echo Bytes: %SIZE%
Автор: igor_andreev
Дата сообщения: 23.06.2007 12:37
GORA2

Цитата:
Не совсем, мне еще столетие приходиться досчитывать

Да, со столетием засада полная... Немного спасает ситуацию то, что в ближайшие 93 года еще XXI век будет на дворе, пока можно смело добавлять к году 20. А потом конечно в конце декабря 2099 года придется все батники переписать

Автор: GORA2
Дата сообщения: 23.06.2007 13:24
igor_andreev

Elroir
Вроде даже проще можно

Код: :show
set "SIZE= %SIZE:~-15,-12% %SIZE:~-12,-9% %SIZE:~-9,-6% %SIZE:~-6,-3% %SIZE:~-3%"
set "SIZE=%SIZE:~-19%"
echo Bytes: %SIZE%
goto :EOF
Автор: Elroir
Дата сообщения: 23.06.2007 13:40
GORA2

Цитата:
Я ошибаюсь?

Нет - все верно. С выравниванием по правому краю условия не нужны - пробелы все равно обрезаются.

igor_andreev

Цитата:
Да, со столетием засада полная...

Я так и представляю себе:
1 января 2100 года, админы после (или еще в процессе) празднования нового года и тут у всех перестают работать батники. Истеричные посты на форуме - что делать??? как быть???
P.S. А все потому, что в далеком 2007 году об этом не подумали.

Автор: Sarancha75
Дата сообщения: 23.06.2007 14:08
В bat файле нужно выполнить определенные действия, но только при наличии нужного файла в определенном каталоге. Если этого файла нет, то соответсвенно делать ничего не надо. Нужный файл определяеся по маске, т.е. в его названии есть необходимая строка. После этого нужный файл переименовывается (надо для дальнейшего шага). Также может быть что файлов с нужной строкой несколько, в этом случае надо использовать только файл, с самой последней датой создания (все остальные файлы желательно удалить).
Возможно ли это сделать внутри bat файла?
Автор: Maza Faka
Дата сообщения: 23.06.2007 15:08
Sarancha75
Попробуй этот код:

Код:
if exist c:\test\test*.* (
for /f "delims=" %%a in ('dir /b /s /o:-d /t:c c:\test\test*.*') do (
if not defined file set file=%%a && set ext=%%~xa)
) else (echo File not exist & goto :eof)

for %%a in (c:\test\test*.*) do if /i not %%a equ %file% del /f /q %%a
ren "%file%" "new_name%ext%"
Автор: Nagual
Дата сообщения: 24.06.2007 03:55
Maza Faka

Цитата:
set FILE=c:\myfile.zip
for %%a in (%FILE%) do for /f "tokens=3" %%b in ('dir %FILE% ^| find /i "%%~nxa"') do set SIZE=%%b
echo Bytes: %SIZE%

а можно ли здесь сделать так, чтобы входил не один файл, а группа файлов, разделенных пробелом, примерно так
файл1 файлХ
был вывод имен в левой колонке имя, а в правой размер с выравниванием по правому краю? и как быть если в имени файла есть пробел?
Автор: Maza Faka
Дата сообщения: 24.06.2007 07:07
Nagual
Надо просто, немного изменить код:

Код:
@Echo off
color 0b
set files="c:\test\file 1.txt" "c:\test\file 2.txt" "c:\test\file 3.txt"
for %%a in (%files%) do for /f "tokens=3" %%b in (
'dir %%a ^| find /i "%%~nxa"') do echo File: %%~a        Size: %%b
Автор: Nagual
Дата сообщения: 24.06.2007 13:53
Maza Faka
спс
Автор: euheny
Дата сообщения: 25.06.2007 02:41
А как бы это unicode заиметь ?

Уже так задолбали эти кодировки и шрифты
Автор: ViSiToR
Дата сообщения: 25.06.2007 03:50
euheny

Цитата:
как бы это unicode заиметь ?

А подробнее можно описать, что и где нужно заменять?
Автор: vmix
Дата сообщения: 25.06.2007 09:03
Elroir

Цитата:
Тебе нужно удалять по определенной дате, или, скажем, удалить все кроме 10 самых новых?

Да, мне нужно 14 дней хранить файлы и удалять или на ленту..
Автор: Maza Faka
Дата сообщения: 25.06.2007 09:20
vmix
Скачай утилиту forfiles.exe, скопируй в папку WINDOWS и запускай этот батник:

Код:
@echo off
forfiles /p c:\temp /m *.* /d -14 /s /c "cmd /c del /q /f @file"
Автор: vmix
Дата сообщения: 25.06.2007 10:23
Maza Faka

Цитата:
Скачай утилиту forfiles.exe

Благодарю, но у меня win2k, а forfiles под ХР и выше

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.