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

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

Автор: Ysan
Дата сообщения: 24.05.2007 16:03
Плиз, помогите исправить. Вроде все просто - а не работает. Нужен батник, создающий, копирующий или удаляющий каталог, указанный в ком. строке, в зависимости от выбранного ключа /n, /c, /d.

@echo off
echo operacii s katalogom
echo d-del c-copy n-make
choice /c:ncd
if errorlevel d goto del
if errorlevel c goto copy
if errorlevel n goto make
:make
    mkdir %1
    goto end
:copy
    md copy
    xcopy /s/e %1 c:\copy
    goto end

:del
    rmdir %1    
    goto end
:end
пишет что каталог уже существует: и не копирует, и не удаляет
а может я не правильно поняла задание про ключи, и нужно делать по другому? подскажите.
Автор: KapralBel
Дата сообщения: 24.05.2007 16:13
Ysan

Код: @echo off
echo operacii s katalogom
echo d-del c-copy n-make
choice /c:ncd
Echo %Errorlevel%

if errorlevel 3 goto del
if errorlevel 2 goto copy
if errorlevel 1 goto make

:make
mkdir %1
goto :EOF

:copy
md C:\copy
xcopy /s/e %1 c:\copy
goto :EOF

el
rmdir %1
goto :EOF
Автор: wolf0425
Дата сообщения: 24.05.2007 16:27
igor_andreev

Цитата:
Но я не люблю и никому не рекомендую для "сурьезной" работы с текстом юзать FOR.

давай я тебя персонально спрошу (а то что-то все дружно промолчали) - посоветуй чего-нибудь для "сурьезной работы с текстом" в кодировке win-1251.
Может есть версии sed (или awk) которые понимают русские буковки как буквы в регэкспах?
Автор: Maza Faka
Дата сообщения: 24.05.2007 16:50
Ysan

Здесь
Цитата:
choice /c:ncd
коды возврата будут: "1" "2" "3", а не "n" "c" "d"
И вообще, батник у тебя некрасивый :-) попробуй так:

Код:
@echo off

choice /c:cdm /n Select action [c]=Copy [d]=Delete [m]=Make

if %errorlevel%==1 goto copy
if %errorlevel%==2 goto delete
if %errorlevel%==3 goto make

:make
mkdir %1
goto :eof

:copy
md copy
xcopy /s/e %1 c:\copy
goto :eof

:delete
rmdir %1
Автор: igor_andreev
Дата сообщения: 24.05.2007 18:26
wolf0425

Цитата:
давай я тебя персонально спрошу (а то что-то все дружно промолчали)

Я тоже промолчал, потому что не знаю такой утилиты.

Цитата:
Может есть версии sed (или awk) которые понимают русские буковки как буквы в регэкспах?

Все sed и awk делают не русскоговорящие программеры, им 1251 не надо. Мне большей частью тоже обычно 1251 не нужно Изредка по мелочи что-нибудь приходится на русском языке менять, по месту и смотрю, чем получится, утилитой или vbs. Sed местами можно заставить понять, что от нее требуется.
Например в test.txt:

Цитата:

бБяка
ббяка
бЛяха
бляха

если вторая буква каждой строки большая(заглавная) русская "Б" или "Л" - сменить на знак подчеркивания.

Код:
sed -e "s/\(.\{1\}\)\([БЛ]\{1\}\)\(.*\)/\1_\3/g" test.txt>new.txt
Автор: alfer1979
Дата сообщения: 24.05.2007 22:57
igor_andreev

Цитата:
Взять 50 символов каждой строки из файла file.txt и записать все это добро в newfile.txt :

gawk "{ printf(\"%%-50.50s\n\", $0) }" file.txt >newfile.txt

Если не из батника, а из командной строки - убрать один знак процента (%). С STDIN(|) gawk тоже умеет читать, можно конкретную строчку обрезать, если отдавать ему вывод sed.exe.
На всякий случай, если синтаксис не совпадет - gawk у меня этот (zip, 91,7 Kb).
Sed тоже такое умеет, только сейчас у меня пока не получилось почему-то правильно выражение составить, берет 50 последних символов и хоть ты ей тресни...

Спасибо большое всё получилось. Ещё два вопроса:
1. Как заменить в файле все точки "." на запятую ","
2. Как сделать чтоб в каждой строке 25 символ заменить на точку с запятой ";"
3. Как сделать чтоб в каждой строке 35 символ заменить на знак табуляции

Большое спасибо за помощь.
Автор: igor_andreev
Дата сообщения: 25.05.2007 01:00
alfer1979
1. sed -e "s/\./,/g" input.txt>output.txt
2. sed -e "s/\(.\{24\}\)\(.\{1\}\)\(.*\)/\1;\3/g" input.txt>output.txt
3. Так же, как 2. 24 меняешь на 34 и точку с запятой на табуляцию
Автор: Ysan
Дата сообщения: 25.05.2007 06:53
KapralBel, Maza Faka, спасибо за помощь, только у меня в каталог СОРУ почему-то не копируется заданный каталог.
Автор: Maza Faka
Дата сообщения: 25.05.2007 08:30
Ysan

Цитата:
олько у меня в каталог СОРУ почему-то не копируется заданный каталог

Какой каталог и как копируешь?
Автор: KapralBel
Дата сообщения: 25.05.2007 09:16
Maza Faka
Ysan
У вас одна и таже ошибка - вы создаете каталог копи в текущем каталоге а копируете в корень диска с

Создайте его в нужном месте
MD C:\Copy
Автор: sdaww
Дата сообщения: 25.05.2007 09:31
wolf0425
Спасибо!!!!
Автор: Angel_Ka
Дата сообщения: 26.05.2007 10:26
Elroir, Maza Faka, wolf0425, yurkesha
Великое гран зер сэнкс за сессию в прошлое воскресенье! Вы очень милые и отзывчивые парни! И так далее...

Elroir

Цитата:
Когда в теме появляется новое сообщение, мне на мейл приходит уведомление об этом - так я знаю, что надо посмотреть тему. Если же ты редактируешь свое сообщение, например добавляешь что-либо - никакого уведомления на мейл не отсылается, соответственно в тему я не заглядываю.

Да... пока не подскажут сама не задумаешься о том.

Ну и ты тоже давай скидку на кокетство. Обиды то не было. Наоборот — ваша компания здорово умеет поднять настороение! Сэнкс, сэнкс, сэнкс...

Всем, кто захочет ответить

Раз.
Что творит строка
Код: reg query HKEY_LOCAL_MACHINE\Software\Far\Registration /v Data >"%~dp0Far%faruser%.log" ^
|| echo Registration.. ^
&& reg import "%~dp0FarSave2.reg" >>"%~dp0Far%faruser%.log"
Автор: Maza Faka
Дата сообщения: 26.05.2007 11:22
Angel_Ka

Цитата:
Что творит строка

А творит она следующее:
запрашивает параметр "Data" в разделе "HKEY_LOCAL_MACHINE\Software\Far\Registration" и если такой параметр существует, в папке откуда был запущен батник, создастся файл %faruser%.log и в него запишется вывод команды "reg query", и произойдёт выход, если запрашиваемого параметра не существует, то создастся пустой файл %faruser%.log и выведется сообщение "Registration..", затем в реестр импортируется файл FarSave2.reg из папки откуда был запущен батник и вывод команды "reg import" запишется в файл %faruser%.log, который находится в папку с батником (%~dp0)
Твой код состоит из одной строки, для удобочитаемости применили символы "^"

По поводу кодировок...даже не знаю, у меня обе команды в "win" кодировке записываются...
Автор: Angel_Ka
Дата сообщения: 26.05.2007 11:48
Maza Faka
Дело в том, что ни сообщение "Registration.." не выводится, ни вывод команды "reg import" в файл Far%faruser%.log не пишется.

Для большей ясности и также насчёт кодировок: пакетник, созданный wolf'ом, в моей извращённой с помощью шефа интерпретации имеет следующее содержание:

Код: @echo off
set faruser=Konstantin
set FARDISK=%~d0\
tasklist.exe | find /i "pFAR.exe" && goto :noimport
path="%~dp0utils";%path%
reg query HKEY_LOCAL_MACHINE\Software\Far\Registration /v Data ^
>"%~dp0Far%faruser%.log" || echo Registration.. && reg import ^
"%~dp0FarSave2.reg" >>"%~dp0Far%faruser%.log"
if not exist "%~dp0Far%faruser%Save1.reg" goto noimport
reg query HKEY_CURRENT_USER\Software\Far\users\%faruser% 2 ^
>>"%~dp0Far%faruser%.log"
if %errorlevel%==0 echo Erasing... && reg delete HKEY_CURRENT_USER\Software\Far\Users\%faruser% /F ^
>>"%~dp0Far%faruser%.log"
reg import "%~dp0Far%faruser%Save1.reg" >>"%~dp0Far%faruser%.log"
:noimport
if exist "%~dp0Far%faruser%Save4.reg" copy "%~dp0Far%faruser%Save4.reg" "%~dp0Far%faruser%Save5.reg" ^
>>"%~dp0Far%faruser%.log"
if exist "%~dp0Far%faruser%Save3.reg" copy "%~dp0Far%faruser%Save3.reg" "%~dp0Far%faruser%Save4.reg" ^
>>"%~dp0Far%faruser%.log"
if exist "%~dp0Far%faruser%Save2.reg" copy "%~dp0Far%faruser%Save2.reg" "%~dp0Far%faruser%Save3.reg" ^
>>"%~dp0Far%faruser%.log"
if exist "%~dp0Far%faruser%Save1.reg" copy "%~dp0Far%faruser%Save1.reg" "%~dp0Far%faruser%Save2.reg" ^
>>"%~dp0Far%faruser%.log"
rem echo. & echo FARuser %faruser%, %%FARDISK%% = %FARDISK%, ^
Starting from %~dp0
echo.
echo. & echo ФАР применяет пользователь %faruser%, старт из папки %~dp0
echo. & echo В сеансе задействована переменная %%FARDISK%%, обозначающая диск %FARDISK%
pFAR.exe /u %faruser% /p"The Underscore"
regedit /ea "%~dp0Far%faruser%PluginsCache.reg" HKEY_CURRENT_USER\Software\Far\users\%faruser%\PluginsCache ^
>>"%~dp0Far%faruser%.log"
reg delete HKEY_CURRENT_USER\Software\Far\Users\%faruser%\PluginsCache ^
/f >>"%~dp0Far%faruser%.log"
regedit /ea "%~dp0Far%faruser%Save1.reg" HKEY_CURRENT_USER\Software\Far\users\%faruser% ^
>>"%~dp0Far%faruser%.log"
reg import "%~dp0Far%faruser%PluginsCache.reg" >>"%~dp0Far%faruser%.log"
tasklist.exe | find /i "pFAR.exe" >>"%~dp0Far%faruser%.log" && goto :eof
reg delete HKEY_CURRENT_USER\Software\Far\Users\%faruser% /F >>"%~dp0Far%faruser%.log"
if exist "%~dp0Far%faruser%.log" copy "%~dp0Far%faruser%.log" "%~dp0Far%faruser%Old.log" >nul
Автор: Maza Faka
Дата сообщения: 26.05.2007 13:42
Angel_Ka
Попробуй так:
удали в батнике все перенаправления стандартного вывода, как то >>"%~dp0Far%faruser%.log" и добавь в начало батника такой код:

Код:
@echo off
if not defined STDOUT (
set STDOUT=yes
cmd.exe /c %0>LOG.TXT 2>&1
goto :eof)
...здесь твой код
Автор: Angel_Ka
Дата сообщения: 26.05.2007 14:06
Maza Faka
Сэнкс! Сделала по инструкции. Содержание LOG.TXT в win-кодировке:
Код: ! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\Software\Far\Registration
Data REG_BINARY E7FEE595B9B8B9BBC81753565C121011501956125E551B5318622760692F67


Ошибка: Недопустимые параметры командной строки.

Операция успешно завершена
'ЄRЇЁаRў -R д c<Rў: 1.
'ЄRЇЁаRў -R д c<Rў: 1.
'ЄRЇЁаRў -R д c<Rў: 1.
'ЄRЇЁаRў -R д c<Rў: 1.


"__ ЁбЇR<мг_в ЇR<мRў в_<м Konstantin, бв ав Ё Ї ЇЄЁ K:\Far\

' б_ -б_  ¤_cбвўRў - Ї_а_&#9488;_-- п %FARDISK%, RЎR- з ой п ¤ЁбЄ K:\

Операция успешно завершена

Операция успешно завершена

Операция успешно завершена
Автор: Ysan
Дата сообщения: 26.05.2007 15:02
KapralBel

Цитата:
вы создаете каталог копи в текущем каталоге а копируете в корень диска с

да, точно, спасибо

Автор: renreg
Дата сообщения: 26.05.2007 16:28
Вопрос Чайника к Гуру.

Мои bat-файлы предназначены для запуска программ со сменного носителя.
Сейчас я готовлю их с флешки.
Использую программу Quick Batch File Compiler, которую мне посоветовали здесь.
Все очень хорошо, н возникло два вопроса:
1. Можно запскать DOS-окно в свернутом режим (чтобы оно вообще не появлялось на экране)?

2. Как я понял, в программе Quick Batch File Compiler предусмотрена возможность компиляции ЕХЕ-файла со встроенной иконкой. Для этого нужно указать путь к ICO-файлу. Но у меня таких нет (ICO-файлов).

Как это можно сделать? Заранее спасибо.

Пример моего Bat-файла

@ECHO OFF EverestHome
cd ..
cd ..
cd USB
cd Bat
cd P
cd EverestHome
Everest.exe
EXIT
Автор: NIKZZZZ
Дата сообщения: 26.05.2007 17:00
renreg

Цитата:
Можно запскать DOS-окно в свернутом режим

Необходимо указать это при компиляции Quick Batch File Compiler.

Цитата:
Но у меня таких нет (ICO-файлов).

Можно поискать в инете готовые или вытащить их из имеющихся dll или exe файлов с помощью соответствующей утилиты.

Автор: Elroir
Дата сообщения: 26.05.2007 17:03
renreg
1. В Quick Batch File Compiler можно в опциях установить "Ghost Application" - при этом никакого окошка при запуске появляться не будет.
2. Очень много иконок хранится в библиотеках - .dll файлах или в самих .exe файлах. Очень много иконок Windows-а находятся в файле shell32.dll в директории Windows\System32. Существует очень много программ, которые могут вытаскивать эти иконки и сохранять как .ico файлы. Поищи в Google "extract icons".

Добавлено:
NIKZZZZ
Пока я писал, ты уже ответил
Автор: renreg
Дата сообщения: 26.05.2007 17:59
Elroir

Цитата:
1. В Quick Batch File Compiler можно в опциях установить "Ghost Application" - при этом никакого окошка при запуске появляться не будет.


Получилось


Цитата:
2. Очень много иконок хранится в библиотеках - .dll файлах или в самих .exe файлах. Очень много иконок Windows-а находятся в файле shell32.dll в директории Windows\System32. Существует очень много программ, которые могут вытаскивать эти иконки и сохранять как .ico файлы. Поищи в Google "extract icons".


Поискал. Нашел. Отлично работает IrfanView.

Спасибо. Пошел писать
Автор: wolf0425
Дата сообщения: 26.05.2007 18:47
Angel_Ka
Цитата:
имеет следующее содержание:
эх, ну и наизвращались же вы с пакетником - прилепили (или разблокировали, что одно и то же) выдачу на экран и в лог кучи ненужного мусора, да ещё в разных кодировках, бэкап прилепили безграмотный, а теперь страдаете...

'ЄRЇЁаRў -R д c<Rў: 1. - это видимо сообщение copy что один файл скопирован.

в начале лога ответ reg query HKEY_LOCAL_MACHINE
Зачем вам понадобилось писать это в лог, а не в nul - выше моего понимания

ответ второго reg query
Системе не удалось найти указанный раздел или параметр реестра
изначально тоже отправлялся в нуль припиской 2>nul - так как полезной информации в таком ответе нет - в том месте интересны подробности только у нулевого кода ошибки.

все сообщения об успехах экспорта/импорта reg.exe
Операция успешно завершена - в оригинале шли в нуль, в логе хранить их в общем-то тоже незачем...
Автор: Ysan
Дата сообщения: 27.05.2007 16:53
научите, плиз, как добавить в существующий файл символы вводом с клавиатуры (в начало\конец файла).
Автор: Maza Faka
Дата сообщения: 27.05.2007 18:54
Ysan
Используя перенаправление вывода, например:

Код:
@Echo off
Echo MyString> file.txt
Автор: Elroir
Дата сообщения: 27.05.2007 19:14
Maza Faka

Цитата:
Echo MyString> file.txt

И сотрется весь файл - отличное решение!
Автор: Ysan
Дата сообщения: 28.05.2007 06:18
а если воспользоваться
copy con file.txt
только при повторном вызове стирается файл file.txt, может как-то можно сделать чтобы в начало или в конец добавлять?
Автор: NIKZZZZ
Дата сообщения: 28.05.2007 06:38
Ysan

Цитата:
а если воспользоваться
copy con file.txt


В конец:


Код: copy /a file.txt+con:
Автор: Maza Faka
Дата сообщения: 28.05.2007 06:47
Ysan
Вот так добавишь строку "MyString" в конец файла

Код:
@Echo off
Echo MyString>> file.txt
Автор: Ysan
Дата сообщения: 28.05.2007 07:35
NIKZZZZ

все, сделала.
хорошо, что есть люди, к которым можно обратиться за помощью. Спасибо
Автор: Maza Faka
Дата сообщения: 28.05.2007 07:44
Ysan

Цитата:
тоже добавляет в начало

Странно, у меня добавляет в конец файла...сделай так: вводишь в консоли код

Код: copy /a file.txt+con

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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