Jump to content
СофтФорум - всё о компьютерах и не только

Управление из командной строки


Recommended Posts

CreatoR:

А для чего делать файл который будет возвращать прежнее состояние, разве при установке шрифта 'Lucida Console', командная строка будет некоректно отображать/обрабатывать латиницу?
По двум причинам: а) меняя реестр, старайся сохранять копию старых значений, хотя проще это сделать вручную с помощью regedit б) вдруг тебе покажется, что старый добрый шрифт Terminal смотрелся приятнее :) В общем, можно такой файл и не делать, но резервную копию этой ветви реестра с помощью regedit я бы сохранил.
как внести эти данные (см. ниже) используя только батник?
По накатанной дорожке.

REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Lucida Console" /f

REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontSize /t REG_DWORD /d 0x00120000 /f

REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontFamily /t REG_DWORD /d 0x00000036 /f

REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontWeight /t REG_DWORD /d 0x00000190 /f

REG ADD HKCU\Console\%%SystemRoot%%_System32_cmd.exe /v FontSize /t REG_SZ /d "Lucida Console" /f

Если при отображении этой страницы правильный вид команд будет портить перенос строк, имей в виду - тут всего пять строк (пять команд, по одной на каждый параметр). Всего пять команд - сойдет. Это лучший вариант.

А если заменять сразу много (десятки) параметров, то, как я раньше написал, есть и второй вариант - подготовить reg-файл, который и будет использоваться в команде regedit /f имя_файла, а эту единственную команду надо будет поместить в bat-файл. Навряд ли вспомогательный файл рядом с твоим bat-файлом чему-нибудь помешает. При желании этот файл можно легко создать и прямо в процессе выполнения bat-файла его командами, хотя проще подготовить его заранее.

Так в какой же из них следует изменять шрифт?
Заменяй обе, не ошибешься.
Link to comment
Share on other sites

...По накатанной дорожке.

REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Lucida Console"...

Спасибо, буду юзать :doh: (пробовать)!

...то, как я раньше написал, есть и второй вариант - подготовить reg-файл, который и будет использоваться в команде regedit /f имя_файла, а эту единственную команду надо будет поместить в bat-файл...

Как быстро меняется структура команды :bleh: (или это опечатка :D - выделенный текст жырным шрифтом в цитате вверху ^) - в сравнении с написанным ранее (в цитате снизу):

Чтобы обойтись без запроса, надо использовать команду

regedit /s имя_файла

PS: Если это моё невежество, тогда извеняюсь :doh: (я в командной строке набрал reg add /?, и как я понял, параметр /s определяет какого то рода разделитель, что мне не совсем понятно :doh: и ИМХО не совсем нужно, а параметр /f как раз то, что мне и надо - он принудительно перезаписывает записи реестра без запроса. А когда я пробовал набрать regedit /?, то почему-то запустился реестр, не знаю, может это у меня только так :doh: )

Link to comment
Share on other sites

CreatoR:

В последнем посте была очепятка ;) . Для regedit надо писать regedit /s имя_файла. После того, как написал пять раз ключ /f для REG, по инерции его же написал и для regedit. Для подавления выдачи запроса на подтверждение действия пользователем в REG служит ключ /f, а в regedit - ключ /s. Почему были выбраны разные буквы :g: , на этой планете никто не знает.

Link to comment
Share on other sites

CreatoR:

В последнем посте была очепятка :)...

Тролль:

ОК! Спасибо!

-А вот возник такой вопрос: Можно ли создать батник, который будет делать резервную копию (backup) файлов?, Но перед созданием папки в которую будут помещены резервные файлы, чтобы он обращался к пользователю с вопросом: "Укажите путь и имя для создания каталога (папки), в который будут помещены резервные файлы", и естественно чтобы после набранного пути и имени файла, по нажатию ENTER (Ввод), выполнялось действие соответствующее запросу (т.е чтобы создавалась папка в указанном месте с указанным именем)! :g:

З.Ы: Я умею создовать батник который делает резервную копию файлов, но, я не знаю как вывести запрос на создание каталога (в заданном адресе/пути) перед осуществлением резервирования, и затем осуществление этого (запрашиваемого) действия

З.З.Ы: Если я сильно намудрил в З.Ы :g: , то см. то что я описал ранее в моём вопросе.

Link to comment
Share on other sites

Тролль:

-Хочю спросить, вот ты давно писал в Этом посте (надеюсь что это не оффтоп - см. далее), о том что можно задать папке значение 'Системная', по средствам командной строки (Attrib +s "путь к папке"). Так вот, а можно ли сделать чтобы батник (*.bat) служил в качестве переключателя, между +s, и между -s :)

Я пробовал сделать это следующим образом:

if "folder" is Attrib -s goto +

if "folder" is Attrib +s goto -

goto end

:+

Attrib +s "folder"

goto end

:-

Attrib -s "folder"

:end

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

З.Ы:Огромную благодарность выражаю модераторам, за то что изменили по моей просьбе название темы... извените за то что не помню кого конкретно просил!... хмм...а хотелось бы знать кого... Ну всё же, ещё раз Спасибо!

Link to comment
Share on other sites

CreatoR:

перед созданием папки в которую будут помещены резервные файлы, чтобы он обращался к пользователю с вопросом: "Укажите путь и имя для создания каталога (папки), в который будут помещены резервные файлы", и естественно чтобы после набранного пути и имени файла, по нажатию ENTER (Ввод), выполнялось действие соответствующее запросу (т.е чтобы создавалась папка в указанном месте с указанным именем)!
Папка создается командой md имя_папки.

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

copy con ttt.txt

Если файла нет, он будет создан, если есть - переписан.

Ввод должен заканчиваться нажатием клавиш F6 и Enter (таинственная клавиша F6 вводит символ конца файла, просто Enter без F6 переводил бы только строку во вводимом тексте).

Если заготовить или создать по ходу выполнения пакетного файла текстовый файл, скажем md.txt, содержащий команду md без параметров, а затем выполнить команду

copy /y md.txt + con md.bat > nul

то после ввода имени каталога получим пакетный файл, содержащий нужную команду, который можно затем запустить из первого пакетного файла командой call. Тут ключ /y подавляет запрос на перезапись файла, если он уже существовал. Так как имя каталога или пути может содержать недопустимые знаки вроде пробела, то надо окружить его кавычками, включив в состав объединяемых командой copy файлов текстовый файл, содержащий знак кавычек. Тогда это будет выглядеть как

copy /y md.txt + kav.txt + con + kav.txt md.bat > nul

Первое включение файла kav.txt со знаком кавычек можно, впрочем, исключить, записав кавычку после команды md еще в файле md.txt.

Аналогично можно вставить введенное имя и в команду копирования (например, xcopy с параметрами).

Другой вариант вставки содержимого файла с введенным именем в текст команды md - использовать команду for, она умеет вставлять нужный кусок заданного ей файла внутрь себя и может скомпоновать содержимое этого файла внутри себя с заданным текстом, после чего выполнить получившуюся команду. Это работает только в Windows линии 2k/XP. Но при этом не нужно создавать и запускать пакетный файл, так что это, пожалуй, несколько лучше.

Edited by Тролль
Link to comment
Share on other sites

CreatoR:

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

copy con ttt.txt...

...Другой вариант вставки содержимого файла с введенным именем в текст команды md - использовать команду for, она умеет вставлять нужный кусок заданного ей файла внутрь себя и может скомпоновать содержимое этого файла внутри себя с заданным текстом, после чего выполнить получившуюся команду. Это работает только в Windows линии 2k/XP. Но при этом не нужно создавать и запускать пакетный файл, так что это, пожалуй, несколько лучше.

После долгих просматривании данного поста, после частичного (я бы сказал даже очень частого) заглядывания в итерпритатор камандной строки, после неудачных попыток осуществить всё это, я вынужден признать порожение... А если серъёзно, я затрудняюсь сделать следующее ;) : 1) создать файл текста, и при этом внедрить в него заданную команду. 2) При попытке запустить дополнительный пакетный файл, запускается окно командного интерпритатора, такое же как окно которое запускается с пускa -> выполнить и набрать cmd (start -> run - > cmd).

P.S: Если тебе не сложно, то выложи пожалуйста тут сценарии требуемого действия (без команд на резервирование папок и файлов) - Т.е чтобы этот сценарии запрашивал (у пользователя) ввести название папки (и путь), и после нажатия на F6 + ENTER, чтобы создавалась заданная папка в заданном пути!

Буду очень благодарен!

Link to comment
Share on other sites

CreatoR:

Интересно, что у тебя могло не получиться? :blush2:

Комплект файлов в приложении (что занятно, в сжатом виде он в три раза больше, чем в несжатом :) ). Распаковать в любую папку и запускать файл test.bat. Можно создать сразу даже цепочку каталогов... В кавычки вводимое имя или цепочку имен заключать не надо, это делает сам батник.

P.S. F6 и Enter нажимаются не вместе, а просто друг за другом, как при обычном вводе, в этом случае обычно записывают не через +, а просто F6 Enter

По предыдущему посту: что за зверь?

if "folder" is Attrib -s goto +

Разделитель is не входит в синтаксис команды if, и почему "folder" должен чем-то напоминать строку Attrib -s? А + является служебным символом и не может использоваться для метки.

test.zip

test.zip

Edited by Тролль
Link to comment
Share on other sites

CreatoR:

... Распаковать в любую папку и запускать файл test.bat...

Спасибо, буду тестить :)

По предыдущему посту: что за зверь?

if "folder" is Attrib -s goto +

Разделитель is не входит в синтаксис команды if, и почему "folder" должен чем-то напоминать строку Attrib -s? А + является служебным символом и не может использоваться для метки.

:blush2: :) , я знаю, это я так, просто к примеру, а "folder" это типа путь к папке, которая в принципе лежит рядом с батником, и вот ещё один такой 'зверь':

if exist Attrib -s "folder" goto +

if exist Attrib +s "folder" goto -

goto end

:+

Attrib +s "folder"

goto end

:-

Attrib -s "folder"

:end

Я тут просто привожу пример, как примерно я представляю себе такого рода переключатель, ведь с такими синтаксисами как Attrib -s, я никогда не сталкивался ранее, и поэтому не имею понятия как создать такой переключатель (Если вобще возможно такое чудо :) )!

Link to comment
Share on other sites

CreatoR:

Attrib -s папка_или,файл

это просто команда снятия атрибута (признака) s (системный) с папки или файла. Ключ +s установил бы этот атрибут. Это такая же команда, как любая другая, просто вместо чаще применяющейся косой черты (слэша) перед буквой ключа используется знак + или -.

Естественно, запись самой команды сравнивать с путем к папке нет никакого смысла. И такая запись в этом месте команды if будет интерпретироваться не как команда Attrib, а просто как строка для сравнения с другой.

Следовало бы сравнивать выданный командой Attrib текст с образцом этого текста, а это опять же можно сделать традиционным для батников способом - записав выдаваемый командой Attrib текст в файл вместо выдачи на экран и сравнивая затем содержание этого файла с образцом для принятия решения.

А для начала можно для простоты не делать переключатель, а использовать два отдельных файла, каждый из которых устанавливает нужный атрибут принудительно, так легче будет разобраться с командой Attrib.

А if exist применяется для проверки существования какого-либо файла или папки, но никак не команды иди текста. Чтобы правильно применять команду, надо прочитать объяснение ее синтаксиса.

Но давай не будем спешить и разбирать одновременно разные задачи, а то текст в топике начинает напоминать чехарду, когда прыгают друг через дружку - посты начали чередоваться через один (более или менее) по разным задачам, и даже мне уже приходится временами вспоминать, о чем я пишу :) Тем более что ветвление по выданным командами текстам в пакетных файлах не относится к числу простых задач. Все-таки батники были задуманы изначально как макрокоманды (цепочки простых команд), а не как язык программирования, и вся наша работа по их использованию вместо Бейсика - это, строго говоря, фокусы :blush2: .

Edited by Тролль
Link to comment
Share on other sites

CreatoR:

...и вся наша работа по их использованию вместо Бейсика - это, строго говоря, фокусы :doh: .

Рас уж разговор зашёл о фокусах, вот один (см. ниже) который мне удалось выполнить за последний час раздумии и догадок. А именно, мне удалось создать этот самый переключатель о котором шла (идёт) речь - но ИМХО на очень и очень преметивном уровне:

Я создал три батника, первый назвал Start.bat, второй А.bat, а третьий В.bat.

  • Состав файла Start.bat:

    if exist c.bat goto B

    call a.bat && ren a.bat c.bat

    goto end

    :B

    call b.bat && ren c.bat a.bat

    :end

  • Состав файла A.bat:

    Attrib +s "folder"

  • Состав файла B.bat:

    Attrib -s "folder"

-Я поместил эти три файла (и одну папку которую следует 'переключать' - под названием "folder") в одну папку, Запустил файл Start.bat, и воалла :bye1: Получился переключатель, тот самый о котором я (и тролль) говорил! Так что - "Если мучаться, то что нибудь получится"! ;)

P.S: И огромное тебе Тролль :thank1: - Тест проверил, это то самое что мне и нужно было :bye1:

Link to comment
Share on other sites

Тролль:

-На счёт Теста, ещё один маленький вопрос - как в него добавить команду которая будет передавать управление в папку которую он создал? Т.е, что-то вроде CD "Папка" :)

-На счёт переменных, тоже есть один вопрос - Можно ли создать переменную так, чтобы вне зависимости от того, будет ли перемещена папка на которую ссылается переменная или нет, она всё равно действовала в системе :) . Т.е чтобы в той папке на которую ссылается переменная, присутствовала какого-то рода метка, по которой и будет распозноваться эта папка, самой переменной (переманная будет осуществлять быстрый поиск той самой метки)!

Link to comment
Share on other sites

CreatoR:

По первому вопросу, вот файлик test2.bat. Он создает папку и выполняет затем команду смены текущей папки на новую, так что если дописать в этот файл еще какие-то команды, для них текущей будет уже новая папка.

Чтобы цепочки имен объединяемых файлов были несколько короче, я включил первые кавычки сразу в файлы с именами команд, а в файле с записью знака кавычки записал за ней и перевод строки. Кроме того, я для простоты примера не стал также уничтожать после использования временный файл, он никому не мешает, а если пакетный файл будет использован повторно, просто перепишется.

По второму вопросу, переменная сама по себе ничего искать не будет. Проще всего записать путь к новой папке в файле, а потом брать его из этого файла. Но создавать файл с путем к новой папке в самой этой новой папке нет смысла, так как ее и нужно будет искать. А при создании файла в старой папке надо для обращения к нему запомнить, где была эта папка. Хотя это тоже можно, но проще записать его в том месте, в котором его легче всего найти, например, в C:\, или там, где хранятся файлы настроек пользователя (используя путь из переменной окружения %APPDATA%). Для примера я сделал это в пакетном файле test3.bat, который делает то же, что и test2.bat, но сохраняет путь в файле в корневом каталоге диска C.

test23.zip

test23.zip

Link to comment
Share on other sites

CreatoR:

...так что если дописать в этот файл еще какие-то команды, для них текущей будет уже новая папка.

-Я наверное уже достал своим незнанием (уж извени :blush2: ), но как можно затем вернуть обратно управление в ту папку, где находится запускаемы батник (в этом случае test2.bat) - То есть, мне нужно (после введения названия папки пользователем) чтобы скопировались файлы/папки которые находятся, допустим, на одну папку выше той папки в которой находится батник (test2.bat), в папку которую указал пользователь.

...Проще всего записать путь к новой папке в файле, а потом брать его из этого файла.

-Понимаешь, мне нужно создать батник, управление которого будет выполняться с той же папки, где он сам и будет находиться, и чтобы он выполнял определённые действия, касающиеся только этой папки (в которой он лежит), и при этом не зависел от буквы диска - Я представляю себе это так: Сделать чтобы ассоциируясь на путь где находится сам батник (которы всё это выполняет), он создавал переменную со значением равняющимся корневой папки (той где он и находитя).

З.Ы: А затем, можно будет добовлять команды, которые будут выполняться как будто батник был запущен с той папки (где он и лежит), и управление осталось бы в той же папке (но при этом не зависил от буквы диска) - И даже после переустановки системы, и/или после перемещения той самой папки на другой диск, после запуска данного батника, переменная будет установлена для той папки где он и находится (без надобности редактировать батник каждый раз при перемещение папки в другой диск).

Link to comment
Share on other sites

CreatoR:

Я не уверен, что правильно тебя понимаю. С "возвращением управления" как-то непонятно, оно возвращается к батнику автоматически после выполнения каждой записанной в нем команды.

Как я догадываюсь, ты хочешь создать батник, который может создать папку на том диске, на котором он лежит, независимо от буквы этого диска? То есть, например, находясь на диске K в папке K:\t1\t2, он должен создать папку K:\t1\t2\t3, а находясь на диске L в папке L:\t1\t2, он должен создать папку L:\t1\t2\t3 ? Это так?

Тогда второй вопрос: путь к папке батника относительно корневого каталога остается неизменным? То есть он всегда лежит в папке \t1\t2, хотя имя диска заранее неизвестно?

Если это так, тогда третий вопрос: батник должен лежать в определенной, но не корневой папке (например, \t1\t2), или может лежать в корневой папке (просто \ ) этого заранее не известного диска?

Link to comment
Share on other sites

Тролль:

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

Так ведь для этого можно просто написать название папки без пути, и она создастся рядом с батником. Или написать допустим ..\папка - и тогда она создастся на папку выше, но мне не обязательно на этом же диске её создавать (см. далее).

-Я немного запутался :g: , щас секунду, соберусь с мыслями....

ОК, значит так: Вобщем, мне нужно чтобы батник перешёл (cd <папка>) в папку которую укажет пользователь (пусть даже на другом диске), и затем с той папки сделал ещё один запрос (у пользователя) на то, куда копировать определённые файлы (именно с той папки куда он перешёл), и естественно, после ввода (пользователем) пути к папке, выполнялась команда (которую вставлю я).

Используя твои тесты, у меня никак не получается перейти к папке на другом диске, когда я ввожу допустим d:\papka\1 затем F6 и ENTER, то введённые команды в созданый md.bat выполняются (в файл md.bat я добавил ещё команду копирования файла с той папки куда происходит переход - так, для проверки), а все действя которые должный выполняться в заданной папке (d:\papka\1), не выполняются - на экране выводятся ошибки команд, и явно видно что команды выполняются с корневой папки батника, что и приводит к неудачному выполнению этих команд!

P.S:

-Первый раздел моего предыдущего сообщения (поста), вот этот (в цитате)...

-Я наверное уже достал своим незнанием (уж извени ), но как можно затем вернуть обратно управление в ту папку, где находится запускаемы батник (в этом случае test2.bat) -...

не связан со вторым (см. цитату ниже):

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

-Вторая цитата, касается вопроса по переменным... А первая, касается именно этого вопроса (с тестами).

Надеюсь объяснил понятно...хм... а почему же тогда я так долго задумался над отправкой сообщения... :)

Link to comment
Share on other sites

CreatoR:

мне нужно чтобы батник перешёл (cd <папка>) в папку которую укажет пользователь (пусть даже на другом диске), и затем с той папки сделал ещё один запрос (у пользователя) на то, куда копировать определённые файлы (именно с той папки куда он перешёл), и естественно, после ввода (пользователем) пути к папке, выполнялась команда (которую вставлю я).
Ты хочешь, чтобы пользователь вводил путь дважды: из какой папки копировать и куда копировать?

И все не так просто: команда cd <папка> вовсе не переводит в папку на другом диске. Для перехода в папку на другом диске надо давать две отдельные команды: перехода на другой диск и перехода в заданную папку.

можно просто написать название папки без пути, и она создастся рядом с батником.
Если мы пишем название папки без пути, она создается вовсе не обязательно рядом с батником. Для ее создания используется путь по умолчанию.

Батник делает запросы не из папки, а от себя лично, а он сидит там, где сидел, и даже не имеет понятия, где именно он сам находится. Ты имеешь в виду, что батник устанавливает заданную папку папкой по умолчанию, а потом делает запрос, куда копировать известные заранее файлы из этой папки? Так зачем эту папку вообще устанавливать папкой по умолчанию? Это намного сложнее, чем просто запрограммировать копировать определенные файлы из одной папки с запрашиваемым адресом в другую с также запрашиваемым адресом.

Может, ты объяснишь не как должен работать батник, а что тебе надо получить с точки зрения пользователя?

Edited by Тролль
Link to comment
Share on other sites

...Может, ты объяснишь не как должен работать батник, а что тебе надо получить с точки зрения пользователя?

Объясняю:

-При запуске батника, чтобы я видел сообщение - "Укажите путь к папке где находятся х файлы" (где х - это файлы на другом диске по отношению к местонахождению батника). Затем батник выдаёт следующее сообщение - "Укажите путь и название папки, куда следует скопировать х файлы" (те же х файлы, что на другом диске) - А в процессе, батник осуществляет действия основанные на том, какие файлы я указал, и в какой путь указал их скопировать.

З.Ы: Если такое слишком трудно выполнить (как мне кажется), то хотябы как решить вопрос о переменных? Вот (в цитате снизу) часть моего поста по этому вопросу (я его немного изменил, чтобы было понятнее):

Мне нужно создать батник, управление которого будет выполняться с той же папки (с папки по умолчанию для этого батника), где он сам и будет находиться, и чтобы он выполнял определённые действия, касающиеся только этой папки (в которой он лежит), и при этом не зависел от буквы диска - Я представляю себе это так: Сделать чтобы ассоциируясь на путь где находится сам батник (которы всё это выполняет), он создавал переменную со значением равняющимся корневой папки (той где он и находитя).

З.Ы: А затем, можно будет добовлять команды, которые будут выполняться как будто батник был запущен с той папки (где он и лежит), и управление (папка по умолчанию) осталось бы в той же папке (но при этом не зависил от буквы диска) - И даже после переустановки системы, и/или после перемещения той самой папки на другой диск, после запуска данного батника, переменная будет установлена для той папки где он и находится (без надобности редактировать батник каждый раз при перемещение папки в другой диск).

З.З.Ы:

По-моему, у тебя какие-то ошибки в понимании работы батника и вообще адресации в файловой системе.

-Я надеюсь что ты поймёшь, так как с командной строкой, и с пакетным файлом, я знаком (близко) не так уж давно, и почти все мои знания в этой сфере, основываются на эксперементах и методах втыка. Да и в прагромировании вообще, я мало что понимаю, так, по наслышкам, личного опыта как такового нет :blink: ! По пречине отсутствия знании терминов (коректных), я также часто затрудняюсь объяснить так, чтобы поняли мою мысль. И учитывая всё это, я надеюсь что ты, и другие форумчане, поймут меня, и будут соответственно строить обо мне мнение (на эту тему).

Link to comment
Share on other sites

CreatoR:

Зачем вводить два пути, непонятно: как я понял, в одном из путей может меняться только буква диска. Но пока что - вот батник, который спрашивает пути к двум папкам и копирует все файлы из одной папки в другую. По-моему, проблема тут в упрощении ручного ввода путей, хотелось бы вводить как можно меньше, а часть каждого пути наверняка можно задать заранее еще при написании батника, но тут я ничего не могу сказать, так как не знаю, что, откуда и куда предполагается копировать. Если какая-то папка находится на другом диске, чем батник, путь к ней надо вводить с указанием буквы диска (типа D:\t1\t2). А если папка находится на том же диске, где батник, то в пути к ней не обязательно вводить букву диска с двоеточием, и диск автоматически будет взят тот, где находится батник.

Все файлы опять немного изменены, так что надо использовать только файлы из этого комплекта.

Насчет необходимости использования переменных поговорим, когда расправимся с первым вопросом.

P.S. Чтобы было понятнее, что делается в батнике: все очень просто - формируется пакетный файл с командой

copy /y "первая_папка" "вторая_папка"

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

test4.zip

test4.zip

Edited by Тролль
Link to comment
Share on other sites

Тролль:

Тест 4 прошёл успешно!

а часть каждого пути наверняка можно задать заранее еще при написании батника, но тут я ничего не могу сказать, так как не знаю, что, откуда и куда предполагается копировать.

Мне нужно скопировать конкретные файлы. Как я понял, этот батник (test4) копирует все файлы которые находятся в той папке которую указывает пользователь в первый раз, и помещает их в другую папку, указанную пользоватрелем во второй раз. Но вложенные папки он не копирует! Я прекрипил тот же архив (tetst4.zip), только изменил в нём файл copy.txt, и сам батник (test4.bat) - Теперь он спрашивает нужное сообщение, и копирует всю папку целиком, включая папки и вложенные в них файлы! - Это для Резирвирования папки...

А для моей цели, я немного помучался, и создал то что тужно! (см. прекреплённый файл test5.zip).

Я бы мог уменьшить количество файлов в архиве (test5.zip), если бы знал как копировать несколько файлов сразу, а также если бы была такая возможность, внедрять текст прямо в файл. Например: команда time /t >> 1.txt - вставит текущее время в файл '1.txt' (если его не существует, то он создастся автоматический). Но чтобы также вставить обычный текст, Например: CreatoR >> 1.txt и чтобы слово CreatoR вставилось в файл '1.txt' (я знаю что это не верная команда, это так, для примера). Тогда не пришлось бы создавать кучу текстовых файлов!

test4.zip

test5.zip

test4.zip

test5.zip

Link to comment
Share on other sites

CreatoR:

Твои файлы я пока не успел посмотреть, позже скачаю и посмотрю (сейчас я не дома), но в основном ответить могу прямо сейчас.

Я и не пытаюсь как-то оптимизировать текст примера, потому что сначала хочу понять, что именно нужно делать. Потому что все время многое остается недосказанным. Например, я не знал, что нужно копировать подпапки. Чтобы их копировать, надо просто заменить команду copy на xcopy с некоторыми дополнительными ключами. Или "как копировать несколько файлов сразу". Команда copy часто может скопировать сразу несколько файлов, если у них в именах или расширениях имен есть что-то общее (то есть если они соответствуют какому-то шаблону), но чтобы сказать определеннее, надо знать, какие файлы (с какими именами) надо скопировать, а если имя какого-то файла будет плохо подходить, нельзя ли его изменить, а также какие еще файлы в папке есть, которые копировать не надо, чтобы они не попали в заданные команде copy правила отбора файлов для копирования.

Насчет копирования текста из строки батника в файл - это делается командой

echo tram tam tam > 1.txt

- если надо переписать файл. А если надо дописать, то вместо > используется >>. Если файла раньше не существовало, то он в любом случае будет автоматически создан.

Link to comment
Share on other sites

...Насчет копирования текста из строки батника в файл - это делается командой

echo tram tam tam > 1.txt

- если надо переписать файл. А если надо дописать, то вместо > используется >>. Если файла раньше не существовало, то он в любом случае будет автоматически создан.

-С этим есть одна проблема...

-После вставленного текста, происходит переход строки. То есть, допустим я в батнике задал команду: xcopy > xcopy.txt - То в созданном файле xcopy.txt, вписывается текст вот так (см. нижние две строки):

xcopy

(тут нет ничего - пустая строка)

-Как сделать чтобы не создавалась новая-пустая строка?:wheelchair:

Link to comment
Share on other sites

CreatoR:

допустим я в батнике задал команду: xcopy > xcopy.txt - То в созданном файле xcopy.txt
Ты имеешь в виду, конечно, echo xcopy > xcopy.txt. К сожалению, легко от знака перевода строки не избавиться. Проще всего использовать дополнительную утилиту. Прикладываю утилиту ech.exe, ее надо поместить в папку с батником. Для использования, в отличие от echo, надо выводимую строку заключать в кавычки, например, ech "tra ta ta" > t.txt выведет строку tra ta ta, а ech " " > t.txt выведет пробел. Так как кавычка - особый знак, выводить ее придется специальным способом: команда ech 034 > t.txt выведет в файл кавычку. В любом случае перевода строки в файле не будет. Для перевода строки надо будет использовать дополнительно команду echo. >> t.txt

P.S. Кстати, на стадии отладки не торопись уничтожать созданные батником временные файлы, в созданном батником test5 файле copy.bat в первой строке у меня было что-то непонятное.

ech.zip

ech.zip

Edited by Тролль
Link to comment
Share on other sites

CreatoR: Ты имеешь в виду, конечно, echo xcopy > xcopy.txt.

Да, конечно, просто я забыл в начале вписать echo, ведь команда новая (для меня :doh:).

-Как я понял (поправь меня если я не так понял), в команде я должен использовать эту утилиту, следующим образом:

ech "CreatoR" > 1.txt - и в файл 1.тхт впишется слово CreatoR, Если так, то тут есть опять проблема:

-Мне, почти во всех выводимых команд в текстовый файл, как раз то кавычки и мешают, Например, я хочю создать следующую строку в файле 1.тхт:

if exist "<users's folder>\profile\*.adr" "..\profile\*.adr" (где <user's folder> это папка котоюю указал пользователь), то для создания текстового файла с этой строкой, нужно в батнике вписать следующее (Хотя это будет не верно - это для примера):

copy /y echo if exist " > 1.txt+c.txt+echo \profile\*.adr" "..\profle\*.adr" >> 1.txt - Но как ты понимаеш, та утилита что ты мне дал, здесь не поможет, и та команда что я превёл в пример, тоже не сработает, как я говорил, из за того что происходит переход строки!

Edited by CreatoR
Link to comment
Share on other sites

...P.S. Кстати, на стадии отладки не торопись уничтожать созданные батником временные файлы, в созданном батником test5 файле copy.bat в первой строке у меня было что-то непонятное.

Да, ты прав! Вот, я его немного изменил, и прекрипил сюда!

-Кстате, а на счёт копировании файлов, я так что-то и не разобрался. как всё-таки копировать несколько файлов в одной строке?:g: -Файлы нужно копировать в принципе вот эти: *.adr, *.dir *.dat, ну и ещё желательно скопировать 3 папки сразу - "images", "sessions", и "mail"

З.Ы: И ещё малюсенький вопросик: Какая команда задаёт определённый размер (и/или шрифт) выводимому тексту (такому как сообщение после echo):g:, если такое возможно конечно?

test5.zip

test5.zip

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.



×
×
  • Create New...