Войти

Показать полную графическую версию : [решено] выравниваемые текста в bat


NibelungXXX
01-07-2013, 21:03
с помощью батника генерируется 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
проще всего – вставлять таб

Iska
01-07-2013, 23:10
с помощью батника …»
И где код?

NibelungXXX
02-07-2013, 03:50
проще всего – вставлять таб »
не поможет, обьем изменяется каждый раз и меняет расположение на чуть чуть, он то больше, то меньше))

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


@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
Пробуйте:
@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
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



http://i066.radikal.ru/1307/43/2bae7b9cb7f3.png

Sphinx114
02-07-2013, 21:42
NibelungXXX, юзать моноширинные шрифты, например Courier New, лично я использую DejaVu Sans Mono

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

NibelungXXX
03-07-2013, 19:35
Iska, Sphinx114 спасибо, все получилось что запланировал

NibelungXXX
07-07-2013, 10:51
Перенес на 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
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
Foreigner, спасибо все получилось, ваш скрипт понравился

NibelungXXX
12-08-2013, 18:24
Подскажите как побороться..
Появились архивы с 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
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
Diskretor, спасибо, правда не работала, пока вот так не сделал:

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




© OSzone.net 2001-2012