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

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

Автор: bomzzz
Дата сообщения: 14.09.2010 20:35
пожет переделкаешь на вариант с одной папкой одной переменной?
вроде работать будет в любыми вариантами имен

Добавлено:
а ета одно и тоже?
if not defined fnum
if "fnum"=""
вообще вкупиться не могу как CALL используется

Добавлено:
эта вообще че дает???
call md "%outdir%%%getdirname%%"
Автор: faithful
Дата сообщения: 14.09.2010 23:08
bomzzz

Цитата:
а ета одно и тоже?
if not defined fnum
if "fnum"=""

У меня вторым условием не получается проверить наличие переменной.

Автор: bomzzz
Дата сообщения: 15.09.2010 02:29
ага точно
@ECHO OFF
COLOR 9F
CLS
if "fnum"=="" echo 111
if not defined fnum echo 222
pause
ну просто странно что сета нет в начале

Добавлено:
king_stiven
картинку - гифик можно засунуть в плеер и смотреть на паузе. возможно не каждый плеер. медиа класик точно гифик проигрывает


Добавлено:
страненько получаица
@ECHO OFF
COLOR 9F
CLS
set "fnum"=""
if "fnum"=="" echo 111
if not defined fnum echo 222
pause
Автор: bomzzz
Дата сообщения: 15.09.2010 04:32
тоже сделал со счетчиком

Цитата:

@ECHO OFF
COLOR 9F
CLS

CHCP 1251>nul
CD /D "C:\TEMP"
CHCP 866>nul


for /F "delims=" %%I in ('dir /A:-D /B') do (
if exist "%%I" (
if exist "%%~nI" (
                set file=%%I
                set name=%%~nI
                set count=
                call :next

) else (
         MD "%%~nI"
MOVE "%%I" "%%~nI"
if exist "%%I.txt" MOVE "%%I.txt" "%%~nI"

)
)
)
PAUSE
goto :eof


:next
set /a count=%count%+1
if exist "%name%[%count%]" goto next
md "%name%[%count%]"
move "%file%" "%name%[%count%]"
if exist "%file%.txt" MOVE "%file%.txt" "%name%[%count%]"
if NOT exist "%name%" REN "%name%[%count%]\" "%name%"

Автор: bomzzz
Дата сообщения: 15.09.2010 06:58
а че так не получица????????????

@ECHO OFF
COLOR 9F
CLS
:noxt
echo AAA
call :next :noxt
pause
goto :eof
:next
echo %0
shift
echo %0
Автор: king_stiven
Дата сообщения: 15.09.2010 07:12
хм

Код: @echo off
chcp 1251 1>nul 2>nul
for /f "delims=" %%a in ('DIR /A-D /B /O:N') do (
if exist "%%a" (
if "%%~na"=="%%a" (
md "zzzz"
move "%%a" "zzzz"
move "%%a.txt" "zzzz"
ren "zzzz" "%%a"
) else (
md "%%~na"
move "%%a" "%%~na\"
move "%%a.txt" "%%~na\"
)
for /f "delims=" %%b in ('DIR /A-D /B /O:N') do (
if "%%~na"=="%%~nb" (
set /a n+=1
set "k=%%b"
set "l=%%~nb"
call :ty
)
)
)
set n=
)
goto :eof
:ty
md "%l%[%n%]"
move "%k%" "%l%[%n%]"
move "%k%.txt" "%l%[%n%]"
Автор: bomzzz
Дата сообщения: 15.09.2010 07:16

Цитата:
@ECHO OFF
COLOR 9F
CLS
CHCP 1251
CD /D "C:\TEMP"

for /F "delims=" %%I in ('dir /A:-D /B') do (
if exist "%%I" (
        set file=%%I
        set name=%%~nI
        set count=
        set caunt=
        call :next
)
)
PAUSE
goto :eof

:noxt
set /a caunt=%caunt%+1
set count=[%caunt%]
:next
if exist "%name%%count%" goto noxt
md "%name%%count%"
move "%file%" "%name%%count%"
if exist "%file%.txt" MOVE "%file%.txt" "%name%%count%"


Добавлено:
king_stiven
че поставил камеру что ли? размеры выставляются.

Добавлено:
Автор: king_stiven
Дата сообщения: 15.09.2010 07:34
нет я про разрешение картинки, поменьше хотелось выставлять сразу без изменения разрешения у себя с 1280 1024 до 800 600
Автор: bomzzz
Дата сообщения: 15.09.2010 07:38
ага, так низя. если программа будет менять на лету разрешение - только больше проца будет жрать. она и так на фулскрине еле тянет. у меня по крайней мере
Автор: GORA2
Дата сообщения: 15.09.2010 07:41

Цитата:
страненько получаица
@ECHO OFF
COLOR 9F
CLS
set "fnum"=""
if "fnum"=="" echo 111
if not defined fnum echo 222
pause

А что же здесь странного!?
Код: if "fnum"=="" echo 111
Автор: bomzzz
Дата сообщения: 15.09.2010 07:43
потому что дефайн - определение, переменная определена. ну или задана.

Добавлено:
тогда может вот так не будет работать

if "%fnum%"=="%fnum%" echo 111
Автор: GORA2
Дата сообщения: 15.09.2010 07:49

Код: set "fnum"=""
Автор: bomzzz
Дата сообщения: 15.09.2010 07:56
когда задается переменная под нее резервируется память. да по дурацки сделано.
вот в 4dos-е все переменные глобальные, чтоб аннулировать переменную надо выполнить
UNSET FNUM

Автор: Maqentaer
Дата сообщения: 15.09.2010 07:57
вопрос по for
можно ли сделать так чтобы при считывании строк текстового файла не игнорировались пустые строки?

код примера такой (просто построчный вывод файла):

Код: for /f "delims=" %%a in (source.txt) do (
    echo.%%a
)
Автор: king_stiven
Дата сообщения: 15.09.2010 08:00
Maqentaer
Кажись в прошлой части было обсосано поищи в версии для печати по слову
пуст
начиная с конца топика
Автор: bomzzz
Дата сообщения: 15.09.2010 08:09
а ты так сделкай ('type source.txt')
Автор: res2001
Дата сообщения: 15.09.2010 08:10
Maqentaer
for всегда отбрасывает пустые строки.
Чтоб не отбрасывал надо сделать их не пустыми, например так:
findstr /r /n ".*" source.txt >source1.txt
Затем в for надо отбросить номера строк из промежуточного файла:
for /f "tokens=1,* delims=:" %%a in (source1.txt) do (
echo.%%b
)
Автор: bomzzz
Дата сообщения: 15.09.2010 08:14
фигу все ранво пустые пропускает

Добавлено:
res2001
Автор: res2001
Дата сообщения: 15.09.2010 08:25
Maqentaer
Только разделитель в for не точка будет, а двоеточие. Очепятка вышла. Пофиксил.
Автор: wolf0425
Дата сообщения: 15.09.2010 08:29

Цитата:
фигу все ранво пустые пропускает
после find /n - пустых просто нет, во всех есть номера. номера фором отрезаешь, остальное используешь.


Код: @echo off
for /f "tokens=1* delims=:" %%a in (' findstr /r /n "^" ^<source.txt ') do (
echo.%%b
)
Автор: res2001
Дата сообщения: 15.09.2010 08:30
bomzzz

Цитата:
фигу все ранво пустые пропускает

Это по вопросу Maqentaer или в продолжении твоей темы по обработке файлов?
Автор: bomzzz
Дата сообщения: 15.09.2010 08:33
по вопросу Maqentaer
я сделал счетчик.

Добавлено:
http://forum.ru-board.com/topic.cgi?forum=62&topic=21297&start=320#17
надо было про call получше почитать
Автор: res2001
Дата сообщения: 15.09.2010 08:37
bomzzz

Цитата:
я сделал счетчик.

Автор: Maqentaer
Дата сообщения: 15.09.2010 08:44
спасибо за ответы.

может кому пригодится...
вот сделал набросок кода, который будет искать строки с определенной фразой и заменять эти строки целиком на другие:

Код:
@echo off
setlocal enabledelayedexpansion

set "search=%~1"
set "replace=%~2"
set "infile=%~3"
set "outfile=%~4"

if "%outfile%" == "" goto usetemp
if /i "%infile%" == "%outfile%" goto usetemp
goto start

:usetemp
set usetemp=1
set "outfile=%temp%\%random%"

:start
del /q /f "%outfile%" >nul 2>&1

set /a skip=0
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"%search%" "%infile%"') do (
    call :before %%i !skip!
    1>>"%outfile%" echo.%replace:&=^&%
    set /a skip=%%i
)
call :after !skip!

if not "%usetemp%" == "1" goto :eof
move /y "%outfile%" "%infile%" >nul 2>&1
goto :eof

:before
set /a pos=%2+1
if not "%2" == "0" set "doskip=skip=%2"
for /f "tokens=1* %doskip% delims=:" %%i in ('findstr /n /r ".*" "%infile%"') do (
    if !pos! == %1 (
        exit /b 0
    )
    1>>"%outfile%" echo.%%j
    set /a pos+=1
)
exit /b 0

:after
if not "%1" == "0" set "doskip=skip=%1"
for /f "tokens=1* %doskip% delims=:" %%i in ('findstr /n /r ".*" "%infile%"') do (
    1>>"%outfile%" echo.%%j
)
exit /b 0
Автор: res2001
Дата сообщения: 15.09.2010 09:10
Maqentaer
Попробуй утилиту sed заюзать для этих целей.
Автор: Maqentaer
Дата сообщения: 15.09.2010 09:20
res2001
таскать с собой 1МБ ради одной замены не вариант для моей задачи
Автор: wolf0425
Дата сообщения: 15.09.2010 09:28

Цитата:
таскать с собой 1МБ ради одной замены не вариант для моей задачи
ну для твоей - таскать утилиту в 100кб может и не вариант, наверно у тебя в тексте никаких спецсимволов гарантировано нет...

код, кстати, "грязно" написан, мне кажется что при тривиальном set "replace=1 2" - будут проблемы - >>source_new.txt надо бы в начала строк перенести.
Автор: Maqentaer
Дата сообщения: 15.09.2010 09:40
wolf0425
ммм, чет ерунду про sed говорите.
sed да вешает 90кб, а вот за собой он тянет либы на 1.2Мб

с set "replace=1 2" да будут проблемы, поэтому я и написал, что это набросок, но для моей задачи этого достаточно, а дальше пока нету времени улучшать.
Автор: res2001
Дата сообщения: 15.09.2010 10:08
Maqentaer
Во втором и третьем цикле надо вместо "tokens=1,2*" поставить "tokens=1*"
Иначе оригинальные строки, которые не заменяются, в исходящий файл не добавляются.
В :before используешь переменную i и в цикле и вне - как-то это не хорошо.

wolf0425

Цитата:
set "replace=1 2"

Потестировал батник Maqentaer, по моему проблем со строками в source и replace, содержащими пробелы, нет.
Автор: wolf0425
Дата сообщения: 15.09.2010 12:39
Maqentaer
Цитата:
wolf0425
ммм, чет ерунду про sed говорите.
sed да вешает 90кб, а вот за собой он тянет либы на 1.2Мб

sed 4.0.7 из unixutils от 10.2003г - те же 95к, и работает без либ.
sed 3.0.2 из unixutils от 04.2003г - вообще 49кб, и конечно же тоже не требует либ, в unixutils все утилиты так скомпилированы...
что 4.2 требует трех либ на мегабайт - неудобно, да, но программисты не подсевшие на Cygwin видимо перевелись...

res2001
Цитата:
set "replace=1 2"
Потестировал батник Maqentaer, по моему проблем со строками в source и replace, содержащими пробелы, нет.
это ты так плохо тестировал.
проблема там не в том что пробел, а в том что напечатает сочетание
set "replace=1 2"
echo.%replace%>>source_new.txt
точнее в том, что оно ничего не напечатает.

поправить код недолго, но почему не приучаться писать код не "для себя", а сразу нормально, чтоб таких проблем не было?
1>>source_new.txt echo.%replace%

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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