Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: bredonosec
Дата сообщения: 14.07.2005 01:43
Smitis

Цитата:
Точка с запятой для коментариев в батниках не используется.
Значит с регами спутал..
Так при котором способе коммент также будет выводиться на екран? При обоих?
А если в зареманной строке проскочит какое-нить значение, используемое в реестре (исследуемый и комментируемый батник выдирает из реестра некие записи, модифицирует их и кидает обратно), оно не погадится?
ЗЫ. насчет echo хоть не ошибся - его назначение выводить на экран, или просто перевод строки?
cainz

Цитата:
или, чтоб красиво смотрелось - @echo
Что за эффект значок при исполнении дает?
Автор: Smitis
Дата сообщения: 14.07.2005 22:50
bredonosec
Отвечаю в обратном порядке:


Цитата:
Что за эффект значок при исполнении дает?

По умолчанию, командный прочессор выводит на экран строки, которые выполняет. Символ @ отключает вывод команды, перед которой стоит. Специальная форма echo - ECHO OFF отключает вывод всех команд начания со следующей. Значок @ перед ECHO отключает вывод и текущей команды тоже. Таким образом команда @ECHO OFF отключает вывод выполняемых команд, начиная с текущей. Поэтому с неё всегда, как правило, начинают командные файлы. Уффф... писать дольше, чем разобраться...


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

Команда ECHO выводит на дисплей ЛЮБОЙ текст, после неё, исключая пробельные символы между ней и первым непробельным символом. Опускаю нюансы с ON/OFF, а также спец. символы. Таким образом можешь использовать её для вывода на экран не только коментариев, но и любого текста:

Код:
echo Это коментарий!
echo А это просто сообщение.
Автор: scup
Дата сообщения: 27.07.2005 11:08
01.01.05
a
b
c
d
02.02.04
a
b
c
d
a
b

Как батником оставить только даты и строки, начинающиеся на а?
Автор: Smitis
Дата сообщения: 27.07.2005 12:53
scup

Цитата:
Как батником оставить только даты и строки, начинающиеся на а?


Код:
if "%str:~0,1%" == "a" ......
if "%str:~0,1%" == "0" if "%str:~2,1%" == "." ......
if "%str:~0,1%" == "1" if "%str:~2,1%" == "." ......
if "%str:~0,1%" == "2" if "%str:~2,1%" == "." ......
if "%str:~0,1%" == "3" if "%str:~2,1%" == "." ......
Автор: scup
Дата сообщения: 27.07.2005 20:49
Smitis можешь весь батник привести, используя мою задачу?
Автор: Smitis
Дата сообщения: 29.07.2005 00:19
scup

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

Где ж я его возьму, батник то?
Собственно, я уже тебе написал. Подставляй вместо многоточий свои команды, например, переход на метку с алгоритмом обработки. Откуда ты берёшь строки, извини, не знаю. Попробуй сам написать
Автор: scup
Дата сообщения: 29.07.2005 08:50
Smitis Ладно, я уже решил задачку с помощью findstr. Спасибо за помощь.
Автор: igor_andreev
Дата сообщения: 29.07.2005 08:58
scup
Считывай текстовой файл построчно в цикле for и проверяй каждую строчку, как Smitis написал. Если разрешить enabledelayedexpansion, то одним for можно обойтись, без перехода на другую метку батника.


Код:
@ECHO OFF & SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

FOR /F "TOKENS=*" %%A IN (your_old.txt) DO (
SET str=%%A
IF "!str:~0,1!" EQU "a" ECHO %%A>>your_new.txt
IF "!str:~0,1!" EQU "0" IF "!str:~2,1!" EQU "." ECHO %%A>>your_new.txt
IF "!str:~0,1!" EQU "1" IF "!str:~2,1!" EQU "." ECHO %%A>>your_new.txt
IF "!str:~0,1!" EQU "2" IF "!str:~2,1!" EQU "." ECHO %%A>>your_new.txt
IF "!str:~0,1!" EQU "3" IF "!str:~2,1!" EQU "." ECHO %%A>>your_new.txt
)

ENDLOCAL
Автор: TCPIP
Дата сообщения: 18.08.2005 02:18
igor_andreev
Игорь, можно ли решить следующую задачу, помогите пожалуйста:
Имеется набор папок. Необходимо создать копию этой папки (с сохранением ее структуры), но так, чтобы внутри скопированных папок теперь остались только файлы с определенным именем.
Конкретно: есть папка My Music с вложенными в нее папками и музыкальными файлами. Плюс в каждой папке лежит файл URL.txt. Хотелось бы создать копию папки My Music, так чтобы теперь во всех папках копии остался лежать только этот файл. Причем файл URL.txt нужно из источника перемещать --- то есть в оригинальной папке My Music он должен исчезнуть после такой операции (а все остальные файлы на должны остаться на источнике). Ну и, разумеется, хотелось бы, чтобы эта операция была повторяемой, то есть при повторном ее проведении, если структура источнка изменилась (появились новые папки и файлы), уже имеющиеся папки и файлы URL.txt на адресате не должны затираться.
Автор: volodyalipkin
Дата сообщения: 18.08.2005 04:15
TCPIP
Я хоть и не
Цитата:
igor_andreev
, но можно отвечу?

cd /D "C:\Documents and Settings\TCPIP\My Documents\My Music"
xcopy Url.txt c:\kuda_xochesh_pisat /E
del /s /q Url.txt

В первой строчке должен стоять путь к твоей папке с музыкой
Во второй строке - /E для создания пустых директорий. Иначе - /S
Автор: Garrett
Дата сообщения: 18.08.2005 11:48
Есть данные (текстовая колбаса одинаковой ширины, много мегабайт).
Иногда нужно вырезать n-ое кол-во символов с определенной позиции в каждой строке(н-р, удалить 2 первых(или с 7 по 9) символа в каждой строке).
Какой командой или батником можно это сделать?
Спасибо.
Автор: igor_andreev
Дата сообщения: 18.08.2005 14:29
Garrett
test.txt

Код:
1234567890
1234567890
1234567890
1234567890
1234567890
Автор: Garrett
Дата сообщения: 18.08.2005 16:42
igor_andreev
Работает...
Cпасибо.
Напустил для примера на 267 метровый файл, сижу, жду...

Снял, т.к. за 12 минут обработал всего 22 метра.
Придет писать свою прогу для таких дел.

А где можно почитать про командные сценарии?
Автор: volodyalipkin
Дата сообщения: 18.08.2005 18:50
Garrett
Perl не подойдёт?
Автор: Garrett
Дата сообщения: 18.08.2005 21:33
volodyalipkin
Что-то надо будет ставить на машину? И не будет мешать всему остальному?
Автор: volodyalipkin
Дата сообщения: 19.08.2005 03:26
Ставить надо Perl (www.activestate.com). Ничему мешать не будет.
Автор: BBMike
Дата сообщения: 26.08.2005 17:04
Друзья,

дайте пожалуйста текст батника для одновременного запуска двух приложений.
Автор: TCPIP
Дата сообщения: 26.08.2005 17:57
volodyalipkin
05:15 18-08-2005
Цитата:
но можно отвечу?

cd /D "C:\Documents and Settings\TCPIP\My Documents\My Music"
xcopy Url.txt c:\kuda_xochesh_pisat /E
del /s /q Url.txt

Конечно! Спасибо!
Автор: bredonosec
Дата сообщения: 27.08.2005 21:18
Smitis
Спасибо за обьяснение

Цитата:
ntcmds.chm
- Это по командной строке для ХР, которая, вроде как несколько дополнена и расширена по сравнению с 9х. А как в 9х такое может зваться? (по хелпу полазил - что-то не нахожу.. единственный batch - инструкции по созданию унаттенд инсталла )
Автор: Da_Neil
Дата сообщения: 29.08.2005 12:39
Кто-нибудь может объяснить, почему не работает такая команда:

Код: START "Post" "C:\WINDOWS\system32\cmd.exe" /c ""S:\Multimedia\Soundz Good\Exact Audio Copy\Scripts\eac-enc.bat" "A & B.wav" "E:\Thunderbird\Atmp!-!9(.wav" "E:\Thunderbird\Atmp!-!9(.ape" "Artist" "Album" LOW "2331" "Genre""
Автор: KapralBel
Дата сообщения: 29.08.2005 15:29
Da_Neil

Может быть дело в этом

Цитата:

команда1 & команда2 Используется для разделения нескольких команд в одной командной строке. В Cmd.exe выполняется первая команда, затем вторая команда.
Автор: Da_Neil
Дата сообщения: 29.08.2005 16:38
KapralBel
Похоже.. С параметром /s вроде как заработало..

Чёрт бы побрал эту нтшную консоль! Ума не приложу, почему из командной строки это работает, а из батника — нет:

Код: "s:\Multimedia\Soundz Good\Tag\Tag.exe" --ape2 -f "CUESHEET=E:\Stoloff & Hopkinson — Documents Enclosed [2001] [EAC+APE, CUE+LOG inside by djet].ape.cue" -f "LOGFILE=E:\Documents Enclosed.log" --artist "Stoloff & Hopkinson" --album "Documents Enclosed" --year "2001" --genre "Experimental, Abstract, Leftfield" -t "RELEASER=djet" "E:\Stoloff & Hopkinson — Documents Enclosed [2001] [EAC+APE, CUE+LOG inside by djet].ape"
Автор: KapralBel
Дата сообщения: 29.08.2005 16:52
Da_Neil

Батник ты в чем создаешь?
И в какой кодировке 866? 1251?
Кажется тире в этих двух кодировках имеет различные коды, в отличии от всех остальный символов (английский, цифры и т.д)
Автор: Da_Neil
Дата сообщения: 29.08.2005 17:16
KapralBel
Я во всяких пробовал, включая Юникод. В 1251 точно не работает, потому что батники почему-то читаются на древней 866, а в 866 тире странным образом превращается в дефис. Например, результатом команды echo rd — > rd.cmd будет rd -, а не rd —.
Автор: KapralBel
Дата сообщения: 29.08.2005 17:31
Da_Neil

А какую ошибку дает?
Возможно из-за того что тире преобразовывается в дефис и не находит файл
Автор: Da_Neil
Дата сообщения: 29.08.2005 18:08
KapralBel

Цитата:
А какую ошибку дает?

Не может найти папку.

Цитата:
Возможно из-за того что тире преобразовывается в дефис и не находит файл

Так и есть. Не понимаю, почему консоль в NT до сих пор использует устаревшую досовскую кодировку.. Похоже, придётся жить без тире.
Автор: siemensbbbb
Дата сообщения: 29.08.2005 21:29
ребятки помогите программа запускается с батника после загрузки когда он уже не нужен он продолжает висеть огромным окном по среди рабочего стола что нужно дописать чтоб он закрылся или свернулся хотябы
Автор: Da_Neil
Дата сообщения: 29.08.2005 21:41
KapralBel
Как выяснилось, консоль нужно запускать с ключом /u (Unicode). Теперь попробую разобраться с батником..

siemensbbbb
Используй команду start.

Добавлено:
Бесполезно.. Батники, сохранённые в Юникоде, консоль не понимает
Автор: siemensbbbb
Дата сообщения: 29.08.2005 21:47
а поподробнее можно о команде start
Автор: Da_Neil
Дата сообщения: 29.08.2005 21:53
siemensbbbb

Цитата:
C:\Documents and Settings\djet>start /?
Starts a separate window to run a specified program or command.

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]

Самый простой вариант: start путь_к_файлу [параметры]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


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