Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] выравниваемые текста в bat (http://forum.oszone.net/showthread.php?t=263545)

NibelungXXX 01-07-2013 21:03 2177606

выравниваемые текста в bat
 
с помощью батника генерируется txt файл, как сделать, чтобы было нормальное выравнивание?
1. L1 0306.zip 26652 КБ GP
2. L1 0310.zip 17768 КБ GP
3. L1 2567.zip 35539 КБ GP
4. L2 0306.zip 8883 КБ GP
5. L3 0306.rar 8883 КБ GP
6. L3 0307.rar 1 КБ GP

Как сделать чтобы было нормальное выравнивание обьема по правому краю?
А именно вот так:

1. L1 0306.zip 26652 КБ GP
2. L1 0310.zip 17768 КБ GP
3. L1 2567.zip 35539 КБ GP
4. L2 0306.zip 8883 КБ GP
5. L3 0306.rar 8883 КБ GP
6. L3 0307.rar 1 КБ GP

kiripanda 01-07-2013 22:47 2177680

проще всего – вставлять таб

Iska 01-07-2013 23:10 2177706

Цитата:

Цитата NibelungXXX
с помощью батника …»

И где код?

NibelungXXX 02-07-2013 03:50 2177819

Цитата:

Цитата kiripanda
проще всего – вставлять таб »

не поможет, обьем изменяется каждый раз и меняет расположение на чуть чуть, он то больше, то меньше))

Цитата:

Цитата Iska
И где код? »

я думал просто пример приведете а я сам вставлю) а так вот)

Код:

@echo off
for %%i in ("%cd%") do set "name=%%~nxi"
for %%i in (*.rar *.zip) do set /a count+=1
(echo имя %name%&echo количество %count%)>"%name%.txt"
>>"%name%.txt" echo        ^<№^>        ^<Имя файла^>                ^<Обьем^>                марка
set "count="
for %%i in (*.rar *.zip) do (
set /a count+=1
set /a size=%%~zi/1024
>>"%name%.txt" call echo %%count%%                %%i                %%size%% KB                GP
)


Iska 02-07-2013 08:17 2177861

Пробуйте:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in ("%cd%") do set "name=%%~nxi"
for %%i in (*.rar *.zip) do set /a count += 1

>"%name%.txt" (
        echo Имя:        %name%
        echo Количество: %count%
        echo.
       
        call :EchoL "№"        10
        call :EchoS
        call :EchoL "Имя файла" 30
        call :EchoS
        call :EchoL "Обьем"    20
        call :EchoS
        call :EchoL "марка"    10
        echo.
       
        call :EchoC "-"        10
        call :EchoS
        call :EchoC "-"        30
        call :EchoS
        call :EchoC "-"        20
        call :EchoS
        call :EchoC "-"        10
        echo.
)

set "count="

for %%i in (*.rar *.zip) do (
        set /a count += 1
        set /a size = %%~zi / 2^10
       
        >>"%name%.txt" (
                call :EchoR "!count!"  10
                call :EchoS
                call :EchoL "%%~i"      30
                call :EchoS
                call :EchoR "!size! KB" 20
                call :EchoS
                call :EchoL "GP"        10
                echo.
        )
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:PadLeft
        setlocal enableextensions enabledelayedexpansion
       
        set sOut=%~0
        set sVar=%~1
        set iCount=%~2
       
        for /l %%i in (1, 1, %iCount%) do set sSpace= !sSpace!
        set sTempVar=%sVar%%sSpace%
        set sTempVar=!sTempVar:~0,%iCount%!
       
        endlocal & set %sOut:~1%=%sTempVar%
        exit /b
rem ==========================================================================
       
rem ==========================================================================
:PadRight
        setlocal enableextensions enabledelayedexpansion
       
        set sOut=%~0
        set sVar=%~1
        set iCount=%~2
       
        for /l %%i in (1, 1, %iCount%) do set sSpace= !sSpace!
        set sTempVar=%sSpace%%sVar%
        set sTempVar=!sTempVar:~-%iCount%!
       
        endlocal & set %sOut:~1%=%sTempVar%
        exit /b
rem ==========================================================================

rem ==========================================================================
:EchoL
        call :PadLeft "%~1" "%~2"
        <nul set /p sTempVar=%PadLeft%
        exit /b
rem ==========================================================================

rem ==========================================================================
:EchoR
        call :PadRight "%~1" "%~2"
        <nul set /p sTempVar=%PadRight%
        exit /b
rem ==========================================================================

rem ==========================================================================
:EchoS
        <nul set /p sTempVar=
        exit /b
rem ==========================================================================

rem ==========================================================================
:EchoC
        setlocal enableextensions enabledelayedexpansion
       
        set sChar=%~1
        set iCount=%~2
       
        for /l %%i in (1, 1, %iCount%) do set sString=!sString!%sChar%
        <nul set /p sTempVar=%sString%
       
        endlocal
        exit /b
rem ==========================================================================

Возможный результат:
Цитата:

Код:

Имя:        0287
Количество: 3

№          Имя файла                      Обьем                марка   
---------- ------------------------------ -------------------- ----------
        1 netscan.zip                                9256 KB GP       
        2 scdwriter.zip                              1940 KB GP       
        3 smartudm.zip                                177 KB GP



NibelungXXX 02-07-2013 20:21 2178293

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

Имя:        k
Количество: 6

№          Имя файла                      Обьем                марка   
---------- ------------------------------ -------------------- ----------
        1 L3 0306.rar                                43315 KB GP       
        2 L1 0306.rar                                  13 KB GP       
        3 L2 0306.zip                                43315 KB GP       
        4 L1 0306.zip                              129957 KB GP       
        5 L1 0310.zip                                86636 KB GP       
        6 L1 2256.zip                              173292 KB GP


Sphinx114 02-07-2013 21:42 2178331

NibelungXXX, юзать моноширинные шрифты, например Courier New, лично я использую DejaVu Sans Mono

Iska 03-07-2013 06:55 2178437

Лучше всего смотрится Consolas, 14-16 кеглем — в зависимости от dpi монитора. Причём, желательно полноценный шрифт, содержащий дополнительные глифы.

NibelungXXX 03-07-2013 19:35 2178822

Iska, Sphinx114 спасибо, все получилось что запланировал

NibelungXXX 07-07-2013 10:51 2180608

Перенес на 7ку данный скрипт и не работает выравнивание, подскажите как к 7ке его адаптировать?, все выводит а конечный результат:
Код:

Имя:        k
Количество: 6

№          Имя файла                      Обьем                марка   

1.L3 0306.rar          43315 KB GP       
2.L1 0306.rar          13 KBGP       
3.L2 0306.zip          43315 KBGP       
4.L1 0306.zip          129957 KBGP       
5.L1 0310.zip          86636 KBGP       
6.L1 2256.zip          173292 KBGP
Режим вывода команд на экран (ECHO) отключен.

Режим вывода команд на экран (ECHO) отключен. - тоже не нужно чтоб писало

Foreigner 07-07-2013 13:50 2180658

NibelungXXX, Попробуй
читать дальше »

Код:

@echo off
setlocal

set "cnt=100"
for /f "tokens=*" %%i in ('cd') do set "name=%%~nxi"
for %%i in (*.rar *.zip) do call:1 "%%i"

set /a cnt-=100

1>"%name%.txt" (

    echo total: %cnt%
    echo name : %name%
    echo.
    echo  #      name      size    model
    echo --- ------------ -------- --------
    for /f "tokens=2 delims==" %%i in ('set file_') do echo %%i

)

goto:eof


:1
set /a cnt+=1

set /a n=cnt-100
set "n=???%n%"
set "n=%n:~-3%"

set "fname=????????????%~1"
set "fname=%fname:~-12%"

set /a size=%~z1 / 1024
set "size=?????????%size% KB"
set "size=%size:~-8%"

set "file_%cnt%=%n:?= % %fname:?= % %size:?= %    GP"


Как-то так:
Код:

total: 8
name : test

 #      name      size    model
--- ------------ -------- --------
  1  L1 0024.rar    19 KB    GP
  2  L3 0306.rar    3 KB    GP
  3  L3 3311.rar    4 KB    GP
  4  L1 0018.zip    10 KB    GP
  5  L1 1233.zip    2 KB    GP
  6  L2 3335.zip    0 KB    GP
  7  L2 9909.zip    0 KB    GP
  8  L3 0307.zip    5 KB    GP


NibelungXXX 07-07-2013 19:36 2180813

Foreigner, спасибо все получилось, ваш скрипт понравился

NibelungXXX 12-08-2013 18:24 2200419

Подскажите как побороться..
Появились архивы с part01, part02 и сбивают все выравнивание..

Суть программы, все архивы zip и rаr записывает в лог, по порядку, выше все расписано было..
Код:

@echo off
setlocal

pushd "%cd%"
set "cnt=100"

for /f "tokens=*" %%i in ("%cd%") do set "name=%%~nxi"
for /f "delims=" %%i in ('dir /b/a-d "%cd%\*.zip" "%cd%\*.rar" 2^>nul') do call:1 "%%i"

set /a cnt-=100

1>"%cd%\%name%p.txt" (

    for /f "tokens=2 delims==" %%i in ('set file_') do echo %%i

)
popd
goto:eof


:1
set /a cnt+=1

set /a n=cnt-100
set "n=???%n%"
set "n=%n:~-3%"

set "fname=%~1"
set "fname=%fname:~-30%"

set /a size=%~z1 / 1024 +1
set "size=?????????%size% KБ"
set "size=%size:~-10%"

set "file_%cnt%=%n:?= %.        %fname:?= %                %size:?= %        CD %        DVD "


Стало с этими part01 криво писать, потому что название отличается ровно на табуляцию((..Выглядит так:
Код:

  1.        bakup 0802.zip                  4272 KБ        CD        DVD
  2.        bakup 0802.part01.rar                  70411 KБ        CD        DVD
  3.        bakup 0802.rar                145815 KБ        CD        DVD

а надо так:
Код:

  1.        bakup 0802.zip                  4272 KБ        CD        DVD
  2.        bakup 0802.part01.rar          70411 KБ        CD        DVD
  3.        bakup 0802.rar                145815 KБ        CD        DVD


Dragokas 14-08-2013 00:38 2201108

NibelungXXX, попробуйте такую:

читать дальше »
Последнюю строку Вашего скрипта удалить.
Добавить:

Код:

call :EchoTab "%n:?= %.        %fname:?= %" 4 "%size:?= %        CD %        DVD" "file_%cnt%"
exit /B

:EchoTab
:: %1 - текст до табуляции
:: %2 - максимальное кол-во знаков табуляции в конце текста
:: %3 - текст после табуляции
:: %4 - переменная, куда сохраняем результат
  set "text=%~1"
  set tabs=%~2
  for /L %%C in (7,8,200) do (
    if "!text:~%%C,1!" neq "" (set /A tabs-=1) else (goto ext_EchoTab)
  )
  :ext_EchoTab
  for /L %%C in (1,1,%tabs%) do set "text=!text!        "
  set "%~4=%text%%~3"
exit /B

Вторая строка - вместо setlocal напишите setlocal EnableDelayedExpansion


См. call :EchoTab - я там 4 поставил (в первой строке). Можете подкорректировать под себя макс. кол-во TAB-ов.

NibelungXXX 14-08-2013 20:34 2201673

Diskretor, спасибо, правда не работала, пока вот так не сделал:
Код:

call :EchoTab "  %n:?= %. %fname:?= %" 4 "%size:?= %  CD  DVD %%" "file_%cnt%"


Время: 11:31.

Время: 11:31.
© OSzone.net 2001-