Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

Посторонним В. уже пробовала так, пишет, что ipconfig не была распознана, как команда внутренняя или внешняя, как исполняемая программа или file batch :(

может чего -то я где-то заблокировала? Самое интересное , что даже через гугл никаких толковых ответов не нашла...

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 589
  • Создана
  • Последний ответ

Топ авторов темы

snejinka:

Еще три варианта:

а) писать в Run не просто ipconfig, а cmd /k ipconfig

ИМХО это лучший вариант.

б) запуcкать ipconfig из вызванного из меню Windows окна командной строки, набирая команду ipconfig в нем;

это почти совпадает с вариантом Посторонним В., команда cmd в строке Run тоже вызовет это окно, только по варианту Посторонним В. это получается быстрее, чем при использовании меню Windows.

в) соорудить для запуска ipconfig пакетный файл (то есть обычный текстовый файл, только с расширением bat вместо txt), с двумя строчками внутри:

ipconfig

pause

Команда pause тут будет держать окно открытым до нажатия любой клавиши.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

cmd /k ipconfig
- тот же результат

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

Все -таки мне кажется где-то в настройках что-то отключено, а ?

Ссылка на комментарий
Поделиться на другие сайты

snejinka:

Это действительно ipconfig или тот файл, о котором ты упоминала вначале?

Если команда не распознана, то вызываемый файл скорее всего находится не в стандартных папках, где Windows ищет автоматически. Ipconfig находится там, а вот твой файл - вовсе не обязательно. Можно добавить эту папку в пути, где Windows ищет файлы, но, может быть, проще всего сделать к этому файлу ярлык, а в нем (в его свойствах) заменить вызов файла на cmd /k имя_файла

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

А если это ipconfig, то... что-то не то с файлом или Windows. Из открытого окна командной строки он открывается нормально?

P.S. Попробуй сделать две паузы. Мне такой баг никогда не попадался, но CreatoR упоминал, что у него иногда одна команда pause почему-то не срабатывает, приходится ставить две подряд, может, действительно бывает такой баг...

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Это действительно ipconfig или тот файл, о котором ты упоминала вначале

ни тот ни другой, но там есть разница. Все что я сейчас писала , я писала об ipconfig, а с тем файлом... наверное стоит в личку написать. :(

Ссылка на комментарий
Поделиться на другие сайты

snejinka:

У тебя WindowsXp? если да, то попробуй запустить командную строку, и там напиши следующее: c:\windows\system32\ipconfig.exe -если не сработало, то попытайся сделать поиск этой утилиты, набрав в поиске (поиск по диску c:\) ipconfig.exe, и если найдёшь, а также если она не в c:\windows\system32, то перемести её туда. И если это не помогло, т.е если запускается окно и исчезает сразу, или в командной строке пишет теже ошибки что ты упоминала, то по видемому у тебя повреждена утилита ipconfig.exe. А как её наладить, уж извени, но я не знаю :( (разве что скопировать её с другого компа, там где она работает, и заменить её на ту что у тебя в виндоусе). А на счёт другого файла (программы), того что не запускается, нужно знать что это за файл, и какие его свойства (выполнения)!

P.S:

Тролль:

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

А 'дело' (не срабатывает команда pause) не доходит до паузы, потому как происходит сбой в первой команде (ipconfig), и батник просто завершает работу, без того чтобы дойти до команды pause. Нужно узнать почему команда ipconfig даёт сбой, и как я писал выше, если она повреждена, то у меня одно решение: Заменить её! (утилиту ipconfig.exe).

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Вот вопросик:

Как можно при запуске компа, запуск которого будет производится с дискеты (поместив на неё батник autoexec.bat - С содержанием команд для удаления папки винды, или даже для формата диска c:\), форматныть диск c:\ (или другой - системны диск).

Ссылка на комментарий
Поделиться на другие сайты

CreatoR

c:\windows\system32\ipconfig.exe

Уже пробовала, тот же самый результат, у меня ХР , файл там, где ему надо быть. Попробовала с netstat - открывается секунд на 5 , начинает показывать соединения и потом закрывается.

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

Ссылка на комментарий
Поделиться на другие сайты

snejinka:

Если не ты блокировала, значит, кто-то :sm(100): решил помочь настроить Windows, оставаясь инкогнито :sm(100): . Исходно запуск скриптов и прочего, что у тебя запускаться не хочет, разрешен, тем более администратору. Так или иначе, разблокировать лишние ограничения проще всего твикером (настройщиком скрытых настроек). Разных твикеров много. Например, простой с неплохим отбором (для простого) настроек Security & Privacy Complete

Wu-Tang:

Как можно при запуске компа, запуск которого будет производится с дискеты (поместив на неё батник autoexec.bat - С содержанием команд для удаления папки винды, или даже для формата диска c:\), форматныть диск c:\
Я немного выше в топике давал кусок батника, который форматирует диск без запросов подтверждений. Но при работе из MS-DOS это только для FAT, а для NTFS утилита FORMAT из дискеты с DOS не работает. Логический диск c NTFS можно уничтожить из DOS как не-досовский раздел командой FDISK.

А если встроенными средствами DOS не ограничиваться, то все гораздо проще. Берем загрузочную дискету с однодискетной версией Partition Magic, загружаемся с нее и делаем с диском все, что хотим.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

А Как его найти в реестре
Настоящее название папки Start Menu есть, например, в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders - там параметр Start Menu содержит локализованное имя этого меню. А вот вытащить его оттуда в пакетник без специальной утилиты, похоже, не удастся.

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

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

На счёт архиватора, мне нужнен либо маленьки по весу (PowerArchiver около 3-ёх mb), либо как то воспользоваться командой makecab, но чтобы в одной папке, одним махом (одной командой) запоковать все файлы. ...Кстати, а как батником, я могу потом расспаковать этот (или любой другой, не cab - если возможно) архив?
Версия для командной строки раза в три легче полной, то есть для PowerArchiver - мегабайт с небольшим, но версии командной строки есть и у других архиваторов - WinRaR, 7-zip (там размер примерно 300 килобайт), наверное, есть еще и другие, я не составлял полный перечень... Распаковать также вызовом архиватора с сответствующими ключами, они есть в описаниях.
если я создам две команды, и под каждой из них будет стоять команда errorlevel, то пользователю предётся два раза нажимать на любую клавишу (ведь нужно для показа сообщения поставить pause), это естественно если будут две ошибки. Как такое решить?
Зачем пользователю нажимать два раза на клавишу, ведь если уже в первой команде ошибка, то вторую выполнять ни к чему? Надо просто при ошибке, перепрыгнув вторую команду копирования, уйти по goto на сообщение об ошибке.

Другой вариант - связка команд по &&. Тогда вторая команда выполняется только если первая не выдала ошибку.

как узнать, какие команды создают такую переменную, а какие нет?
Какие команды влияют на errorlevel - часто, но не всегда, указывается в описании команды. Например, для copy, кажется, это не указывалось. А узнать просто: запустить в правильном и выдающем ошибку вариантах и каждый раз смотреть по echo %errorlevel%, есть эффект или нет.
А нельзя будет указывать как и раньше, отдельную команду для каждого действия?
Одна программа с двумя-тремя именами-командами, которая при вызове по разным именам выполняет разные действия? Было в каком-то языке программирования такое... Вспомнить бы еще, зачем... Кажется, чтобы иметь несколько входов в одну программу в разных местах... Кажется, это был PL/1... Могу и ошибиться, никогда на нем не работал, седая древность. Чего только люди тогда не изобретали...

Лишние сложности. Экономии на грош, беспокойства на рубль.

И какой нужно будет указывать лишний параметр?
Насчет лишнего параметра я имел в виду вызовы типа universal /1 aaaaa.txt, universal /2 bbbb.txt, universal /3 cccc.txt - соответственно для действия номер 1, действия номер2, действия номер 3... Лучше опять же без этого. Я и так теряюсь от утилит, которые с одним ключом следят за почтой, а с другим - включают таймер для выпечки пирогов :D . Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

snejinka:

Уже пробовала, тот же самый результат, у меня ХР , файл там, где ему надо быть. Попробовала с netstat - открывается секунд на 5 , начинает показывать соединения и потом закрывается.

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

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

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

Тролль:

но версии командной строки есть и у других архиваторов - WinRaR, 7-zip (там размер примерно 300 килобайт)

Спасибо за совет, я нашёл утилиту 7z.exe+подробные описания для её использования в командной строке (файл справки в формате *.chm - правда на английском :( ). Скачать можно тут

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

Вот именно, что 'к чему'! Точнее мне нужно чтобы выполнялась одна команда (для копирования двух папок), но чтобы выводилось сообщение при ошибке этой комнды. Лучше для ясности, процетирую себя:

Вопрос не в том как осуществить проверку errorlevel, мне нужно чтобы была одна команда, и после неё проверялся errorlevel. Но, но, чтобы я мог этой командой скопировать две папки, но в то место куда я указал ("c:\program files\backup"). - Но такой командой, как я привёл в пример в моём прошлом посте [for %%I in (..\folder1 ..\folder2) do xcopy /y "%%I" "c:\program files\backup\%%I"], скопируются эти папки в "c:\program files"

Вопрос тут вот в чём: Как задать одну команду, чтобы копировала 2 каталога целиком, которые находятся на уровень выше самого батника (т.е в родительском каталоге, текущего\рабочего каталога, из которого исполняется эта команда). Копировать эти папки нужно в один каталог, название которого будет Backup, и в нём и должны быть помещены эти два каталога! (как отдельные, а не в одну кучю, т.е в один каталог).

А как быть на счёт утилииты rw? Цитирую кусок своего поста:

Попробовал, выдаёт такой текст: c:\program - (Буква диска меняется в зависимости от того на каком диске была запущена rw) - И вводить ничего не могу.

Есть ещё такие вопросы:

  • Команды for, if, и xcopy, будут работать под windows 98? :)
  • Как я могу копировать файлы через команду xcopy (т.е папку вместе с подкаталогами), но при этом указать исключения конкретных файлов? (параметр Exclude, как я понял, способен исключать файлы, имеющие определённые строчки в их содержании, и если будет совподение с путями копируемых файлов, то они будут исключены - хотя не уверен что правильно понял, или что правильно обьяснил :) ).
Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

А как мне задать команду fdisk, чтобы она автоматом делала бы формат диска c:\ ?

Т.е, если я вставлю загрузочную дискету, и на неё поставлю файл autoexec.bat, а содержание этого файла, должно автоматом форматить диск c:\

Изменено пользователем Wu-Tang
Ссылка на комментарий
Поделиться на другие сайты

Wu-Tang:

Т.е, если я вставлю загрузочную дискету, и на неё поставлю файл autoexec.bat, а содержание этого файла, должно автоматом форматить диск c:\
Это уже другой вопрос. В прежнем задача "автоматом" не ставилась.

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

А как мне задать команду fdisk, чтобы она автоматом делала бы формат диска c:\ ?
Fdisk формат диска вообще не делает. Имелось в виду просто убрать старый логический диск, чтобы создать новый в FAT, который можно форматировать досовской командой FORMAT.

CreatoR:

Команды for, if, и xcopy, будут работать под windows 98?
Все эти три команды существуют в Windows 98, но в сильно урезанных вариантах. Да и сам пакетный файл гораздо больше ограничен, например, объединения команд по & нет. Так что работать будут только самые простые варианты использования команд.
Как я могу копировать файлы через команду xcopy (т.е папку вместе с подкаталогами), но при этом указать исключения конкретных файлов?
Прямо - никак. Можно предварительно поставить какие-нибудь атрибуты у этих файлов, чтобы xcopy их не копировала, например, сделать их скрытыми. Или переименовать, а потом переименовать обратно. Или скопировать, а потом удалить из скопированных. Дело фантазии. Прямого пути не предусмотрено.
Как задать одну команду, чтобы копировала 2 каталога целиком, которые находятся на уровень выше самого батника (т.е в родительском каталоге, текущего\рабочего каталога, из которого исполняется эта команда).
Списком каталоги для копирования задавать нельзя. Две отдельные команды или с помощью for вызывать команду копирования для каждого каталога. Практически, я думаю, надо просто использовать две команды: зачем биться лбом в стену, если ее легко обойти? Ты же не присягал использовать только одну команду?
Копировать эти папки нужно в один каталог, название которого будет Backup, и в нём и должны быть помещены эти два каталога! (как отдельные, а не в одну кучю, т.е в один каталог).
И на здоровье, если уж ты даешь имя каталога как источника для копирования, повтори это имя как имя каталога, в который надо копировать, каталог с этим именем будет автоматически создан в заданном месте. То есть, твой пример
такой командой, как я привёл в пример в моём прошлом посте [for %%I in (..\folder1 ..\folder2) do xcopy /y "%%I" "c:\program files\backup\%%I"], скопируются эти папки в "c:\program files"
надо изменить так:

for %%I in (folder1 folder2) do xcopy /y "..\%%I" "c:\program files\backup\%%I"

Лучше для ясности, процетирую себя: мне нужно чтобы была одна команда, и после неё проверялся errorlevel. Но, но, чтобы я мог этой командой скопировать две папки, но в то место куда я указал.
Да нет тут ясности! Команда for, в которой два раза выполняется команда xcopy отвечает твоим требованиям, и errorlevel после нее никто не мешает проверить. Но тебя это, как я понимаю, не устраивает, значит, вопрос не совсем верно поставлен.

Тебе нужно другое: чтобы ты знал, выполнились ли обе команды xcopy без ошибок. Так?

Для этого есть два варианта: связка команд по && или раздельное выполнение команд. Можно ли использовать вместо двух команд xcopy использовать одну, зависит от обстоятельств. Как я понял, у тебя это сделать нельзя, так как оба каталога для копирования ты хочешь задавать не шаблоном, а индивидуальными именами.

А как быть на счёт утилииты rw?
Вообще, ИМХО, это что-то с Windows того компьютера. В этой утилите менять нечего, если дважды два оказывается пять, а эта утилита именно на этом уровне, причем только на одном компьютере, то... пробуем другие варианты действия умножения. Скорее всего, компьютеру чем-то не нравится ее программный код, хотя разумных причин для этого я не вижу. Значит, берем другой компилятор. Попробуй приложенный к этому посту вариант, я использовал для него другой компилятор.

rw.zip

rw.zip

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

надо изменить так:

for %%I in (folder1 folder2) do xcopy /y "..\%%I" "c:\program files\backup\%%I"

Это то, что и нужно было! Огромное тебе :)

как я не догадался переставить знаки ..\ dont-know.gif

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

Ещё раз огромное тебе Спасибо, эта утилита, нормально заработала на том компе. тока вот ещё вопрос, будет ли она работать в Windows XP Professional x64?

Так что работать будут только самые простые варианты использования команд.

А если эти (и дугие) команды, будут запущены на другой файловой системе (NTFS к примеру), будут ли они работать, или также будут особые ограничения? :( или это не играет никакой роли? (я имею ввиду про отличия на одной и той же ОС).

Есть ещё небольшой вопрос: как правильно устанавливать отображение по команде echo, для кирилицы в пакетном файле? Т.е мне нужно чтобы в виндоусе где не стоит по умолчанию кирилица, батник отображал по команде echo русские буквы - Будет ли достаточно команды chcp 1251, или для подстраховки нужно что то ещё сделать? :) ну чтобы 100% отображались русские быквы в пакетном файле (при его исполнении)?

P.S:

Желательно чтобы отображал кирилицу и в виндоусе где вообще не установлена кирилица. :(

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

эта утилита, нормально заработала на том компе. тока вот ещё вопрос, будет ли она работать в Windows XP Professional x64?
Должна. Но не зря разработчики ПО ничего не гарантируют. Та, что была, тоже должна была работать на любом компе.
А если эти (и дугие) команды, будут запущены на другой файловой системе (NTFS к примеру), будут ли они работать, или также будут особые ограничения?
Файловая система сидит под ковром. Будут работать независимо от файловой системы.
как правильно устанавливать отображение по команде echo, для кирилицы в пакетном файле?
Кажется, мы половину этого топика уже забили установкой шрифтов для echo, напрямую и через реестр. Не стОит начинать сначала. Надо, чтобы для окна командного процессора был установлен TTF шрифт и 1251-я кодовая страница.
Желательно чтобы отображал кирилицу и в виндоусе где вообще не установлена кирилица.
В XP она всегда есть.
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Спасибо! Все предыдущие вопросы решены (BY Тролль :) ).

people_25.gif

Но вот есть пару свежых :)

  1. Как можно, и можно ли вообще, внести список существующих файлов (без каталогов) в текстовый файл, и затем выдать этот список на экран. Но чтобы список состоял только из имён файлов, а не из данных о них и всем прочим. Я задал в батнике такую команду: dir > test.txt - И после его запуска, получил в файле перечень информации, о том где находится текущий каталог, о размере файлов и папок, и вообще оображается дерево папок и файлов как в командной строке. А мне нужен чистый список находящийхся файлов в текущем каталоге батника!
  2. Можно ли каким то (пусть даже хитрым и альтернативным) способом, запустить в батнике команду, но чтобы до её запуска, была пауза определённой длины (не вечная, как по команде pause)? Т.е чтобы чтобы был промежуток во времени (в определённом), между двумя (иногда и больше) командами.
  3. Как командой del (или другой командой, или даже утилитой), можно удалять файлы которые были созданы позже укзанного времени? :blink: (или удалять все файлы, кроме тех что были созданы раньчше чем указанное время).
Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

A.

dir /b /a-d > test.txt

B.

Для задержки используй команду

ping -n 5 localhost > nul

это дает задержку на 5 секунд, для другой задержки надо соответственно подкорректировать.

C.

xcopy . .\f\ /d:06-13-2006 /h /l | find ".\" > \xc.txt

for /f "delims=" %%i in (\xc.txt) do del /f "%%i"

Эти две строки в батнике удалят все файлы в текущей папке, с датами изменения начиная с указанной (в данном формате!). Имей в виду, если среди них будет твой bat-файл, он тоже удалится :( . Если надо делать какие-то исключения, надо перед del включить команду if. Ну и, конечно, папка тоже может быть не текущая, а другая, тогда надо подкорректировать путь (для ясности: в примере . в командах означает текущую папку, аналогично тому как .. - родительскую папку).

При экспериментах с del почаще вспоминай пословицу "Укоротишь - не воротишь". Против нее помогает пословица "Семь раз отмерь, один раз отрежь", а также включение при отладке команды @echo вместо del.

P.S. Сейчас немного изменил последний пример (добавил \ к xc.txt) для устранения возможной ошибки с русскими именами файлов.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Здорова

Тут такая дискусия идет :(

Сорри если не по адруссу, но темка, я надеюсь по вашим "зубам" :)

http://www.softboard.ru/index.php?showtopic=36214&hl=

Может вы мне подскажете ?! Возможно ли *. bat ник написать ?!

Ссылка на комментарий
Поделиться на другие сайты

veiK:

ИМХО батник тут не получится, поскольку надо управлять программами с GUI, а вот использовать программы для записи и воспроизведения нажатий клавиш, кнопок и движений мыши должно получиться. Таких программ море, от фриварных до совсем не фриварных. Я ими не пользовался, поэтому какая лучше подойдет, сказать не берусь, но вот несколько ссылок на вроде бы фриварные:

NaughtyMouse

Autoit

DoOver

Macrorecorder

Smart Macro

RemoteKeys

Ссылка на комментарий
Поделиться на другие сайты

Тролль:

A.

dir /b /a-d > test.txt

В данной команде, можно как-то поставить ограничениe, на то чтобы в текстовы файл (test.txt) вносился список файлов, только с определённым расширением? (*.exe). А также, если возможно (в добавок), сделать как-то чтобы в этот файл (test.txt) вносился список, существующих тех файлов, которые также и в подкаталогах (но также желательно, чтобы только с расширением *.exe).

B.

Для задержки используй команду

ping -n 5 localhost > nul

это дает задержку на 5 секунд, для другой задержки надо соответственно подкорректировать.

Спасибо, даже и не думал что в батнике такое возможно :1eye:

C.

xcopy . .\f\ /d:06-13-2006 /h /l | find ".\" > \xc.txt

for /f "delims=" %%i in (\xc.txt) do del /f "%%i"

Эти две строки в батнике удалят все файлы в текущей папке, с датами изменения начиная с указанной (в данном формате!).

В моём прошлом посте, я немного не так объяснил что конкретно мне нужно. Вообще-то, желательно чтобы удааялись все файлы, которые были созданы, ну допустим, НЕ ранее чем час назад - или же, чтобы удалялись все файлы, имеющие определённое расширение (*.txt), но которые были созданы не раньше чем текущая дата (т.е указав переменную %date%) - Мне всё это нужно для того, чтобы удалять файлы оставленные батником во время его выполнения, а указывать через for %%I in (тут файлы) do del %%I не очень-то уж и удобно, т.к иногда бывает очень много файлов оставляемых батником. А удалять их таким образом: del *.txt, тоже не хочется, т.к под эту команду могут попадать другие файлы, с этим же расширением :) .

Имей в виду, если среди них будет твой bat-файл, он тоже удалится :) . Если надо делать какие-то исключения, надо перед del включить команду if.

-А на счёт исключении, я что-то не понял, как сделать исключение моего батника, который естественно должен выжить в результате всей этой 'Борьбы' (процедуры удаления) :( - я примерно понимаю, что тут нужно задать какое-то условие (командой if), при котором будет исключено удаление самого батника, но как именно это сделать, если често, то я не имею никакого понятия... dont-know.gif

P.S:

Есть ещё два вопроса (первый немного глуповат :1eye: , но всё-же...):

1) Какая разница между @echo off и echo off? - Т.е зачем ставить символ @ перед командой echo в начале скрипта?

2) Мне нужно из текстового файла, в котором прописан путь к определённому каталогу (хотя не важно к какому), взять, допустим в другой текст-файл, последнее слово, которое идёт после последнего слэша. Т.е, например, у меня в файле test.txt, прописан такой путь: c:\program files\my program\CreatoR - и мне нужно, каким то образом, выдернуть из этого файла слово CreatoR, и поместить его в другой текст-файл (но можно и без файла, можно было бы воспользоваться этим прямиком в батнике, только я не знаю как это будет осуществленно, поэтому не могу сказать возможно ли в батнике использовать, без того чтобы взять из другого файла). Но при этом, мне не известно, что будет в файле test.txt, т.к туда впишется то, что укажет пользователь (одно только известно - это то, что указанный путь, будет существующий путь!).

Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

В данной команде, можно как-то поставить ограничениe, на то чтобы в текстовы файл (test.txt) вносился список файлов, только с определённым расширением? (*.exe).
dir /b /a-d *.exe
А также, если возможно (в добавок), сделать как-то чтобы в этот файл (test.txt) вносился список, существующих тех файлов, которые также и в подкаталогах (но также желательно, чтобы только с расширением *.exe).
dir /b /a-d /s *.exe
всё это нужно для того, чтобы удалять файлы оставленные батником во время его выполнения, а указывать через for %%I in (тут файлы) do del %%I не очень-то уж и удобно, т.к иногда бывает очень много файлов оставляемых батником. А удалять их таким образом: del *.txt, тоже не хочется, т.к под эту команду могут попадать другие файлы, с этим же расширением
Никто не требует, чтобы вспомогательные файлы имели расширение txt. Я давал им это расширение лишь для удобства просмотра в текстовом редакторе двойным кликом по файлу. Если их нежелательно путать с другими, можно дать им или обычное для временных файлов расширение имени tmp, или любое придуманное вроде abr (от abracadabra).

Насчет того, чтобы именно с сегодняшней даты - есть трудность, поскольку %date% содержит дату в другом формате, чем требуется для команды xcopy. В принципе можно вывести содержание %date% в файл, выбрать из него с помощью for отдельные части и снова соединить их в нужный для xcopy формат, но при собственном расширении для временных файлов выбирать файлы с определенными датами излишне.

Какая разница между @echo off и echo off? - Т.е зачем ставить символ @ перед командой echo в начале скрипта?
Чтобы на экран не выводился текст самой команды echo off. Префикс @перед любой командой подавляет вывод ее текста на экран. Так что @echo off подавит вывод как текста самой этой команды, так и всех последующих.
Мне нужно из текстового файла, в котором прописан путь к определённому каталогу (хотя не важно к какому), взять, допустим в другой текст-файл, последнее слово, которое идёт после последнего слэша. Т.е, например, у меня в файле test.txt, прописан такой путь: c:\program files\my program\CreatoR - и мне нужно, каким то образом, выдернуть из этого файла слово CreatoR, и поместить его в другой текст-файл (но можно и без файла, можно было бы воспользоваться этим прямиком в батнике
for /f "delims=" %%i in (test.txt) do echo %%~ni
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Никто не требует, чтобы вспомогательные файлы имели расширение txt.

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

for /f "delims=" %%i in (test.txt) do echo %%~ni

За это, Огромное спасибо! даже и не думал что всё так просто! :mad:

dir /b /a-d *.exe

dir /b /a-d /s *.exe

На счёт вывода всех файлов с расширением *.exe в текст файл (хотя уже это *.tmp файл ;) ), у меня есть ещё вопрос:

-Как сделать исключение, для одного конкретного файла, в конкретной папке (rw\rw.exe)?

ДОБАВЛЕНО: Я заметил, что после добавления ключа /s, в файл стали выводиться полные пути екзешников, а можно ли как-то сделать так, чтобы если программа находится в подкаталоге, то пусть прописывается путь начиная с текущего (хотя можно и полный путь, но желательно с текущего), а если эта программа находится в текущем каталоге, то пусть прописывается лишь название самого файла. Я временно решил эту проблему, тем что прописал две команды:

dir /b /a-d /s *.exe > fileslist.tmp

dir /b /a-d *.exe > fileslist1.tmp

Но когда я вывожу эти два файла на экран:

type fileslist.tmp

type fileslist1.tmp

То и в первом списке, и во втором, присутствует программы которые в текущем каталоге, только в первом списке они прописанны как полный путь, а во втором просто имя самого файла.

Есть ещё подобный вопрос:

-Как задать исключение этого же файла (rw.exe) в команде - if exist *.exe goto exist? - Т.е чтобы условием было присутствие хотябы одного файла с расширением *.exe, но чтобы файла rw.exe это не касалось...

А также, как сделать так, чтобы если существует хоть один файл с расширением *.exe и в подкаталогах, то будет выполнена команда после условия (goto exist)? :)

P.S: если этот вопрос решится, то ненужно в предыдущем вопросе делать исключение для папки в которой лежит rw.exe, т.е эта утилита тогда может находиться и в текущей папке батника!

P.P.S:

Как будет решение этих вопросов, я выложу тут батник, который, IMHO, пригодится многим! -Он будет делать запись в реестр, для запуска файлов посредствам контекстного меню Windows, при помощий выбранной программы в батнике!

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

В предыдущем моём посте, я добавил кое-что, добавка начинается с красного слова ДОБАВЛЕНО:.

2ALL

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

Вобщем результаты, показали что практический после всех команд (известных мне), проверяется уровень ошибочности (errorlevel) предыдущей команды. И если errorlevel равен нулю (0), то выводится сообщение: ok!, а если равен единице (1), то, навернное, ничего не будет выведенно :bye1: .

Я прописал в батнике, наиболее используемые команды, и после каждой из них, поставил строчку для проверки errorlevel.

Вот состав этого батника:

@echo off

xcopy *.* folder\*.*

if errorlevel 0 echo ok!

pause

copy /y *.* folder\*.*

if errorlevel 0 echo ok!

pause

pause

echo check!

if errorlevel 0 echo ok!

pause

pause

cd > Test.txt

if errorlevel 0 echo ok!

pause

pause

echo Test! > Test.txt

if errorlevel 0 echo ok!

pause

pause

for %%I in (Test.txt) do echo %%I

if errorlevel 0 echo ok!

pause

pause

for /f %%I in (Test.txt) do if /i not exist %%I echo %%I

if errorlevel 0 echo ok!

pause

pause

start /b Test.txt

if errorlevel 0 echo ok!

pause

pause

del Test.txt

if errorlevel 0 echo ok!

pause

pause

md Test

if errorlevel 0 echo ok!

pause

pause

rmdir Test

if errorlevel 0 echo ok!

pause

pause

if not exist Tralyalya echo Test

if errorlevel 0 echo ok!

pause

pause

echo echo Test Bat ^& pause > Test_Bat.bat

if errorlevel 0 echo ok!

pause

pause

call Test_Bat.bat

if errorlevel 0 echo ok!

pause

pause

move Test_Bat.bat folder\Test_Bat.bat

if errorlevel 0 echo ok!

pause

pause

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

P.S: тут, в тексте внизу, прописана строчка красным цветом, она указывает на запуск текст-файла!

C:7-zip.chm

C:7z.exe

C:copying.txt

C:readme.txt

C:Command for 7z all files.bat

C:BATHiK.bat

Скопировано файлов: 6.

ok!

Для продолжения нажмите любую клавишу . . .

7-zip.chm

7z.exe

copying.txt

readme.txt

Command for 7z all files.bat

BATHiK.bat

Скопировано файлов: 6.

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

check!

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

Test.txt

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

Test!

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

Тут запустился текстовый файл, с таким содержанием: Test!

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

Test

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

Test Bat

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

ok!

Для продолжения нажмите любую клавишу . . .

Для продолжения нажмите любую клавишу . . .

P.S:

Я ставил по две паузы после каждой команды if errorlevel 0 echo ok! для того, чтобы на случай если первая не сработает (у меня всегда первая не срабатывала в этом батнике - ну, кроме самой первой, та что в самом начале этого батника, т.к перед ней нет других команд pause), то вторая сработает точно! (пауза там для того, чтобы увидеть отображение сообщения ok! - если конечно будет таковое :) ).

Изменено пользователем CreatoR
Ссылка на комментарий
Поделиться на другие сайты

CreatoR:

Как сделать исключение, для одного конкретного файла, в конкретной папке (rw\rw.exe)?
Исключение в ходе поиска сделать сложно, проще исключить этот файл из готового списка.

Например, dir /b /a-d /s *.exe | find /v "rw.exe"

Тут find пропустит на выход только строки, не содержащие rw.exe

Как задать исключение этого же файла (rw.exe) в команде - if exist *.exe goto exist? - Т.е чтобы условием было присутствие хотябы одного файла с расширением *.exe, но чтобы файла rw.exe это не касалось...
Проще всего, наверное, временно переименовать этот файл к другому расширению, а потом переименовать его обратно.

ren rw.exe rw.tem

if exist *.exe goto exist

ren rw.tem rw.exe

...

:exist

ren rw.tem rw.exe

А также, как сделать так, чтобы если существует хоть один файл с расширением *.exe и в подкаталогах, то будет выполнена команда после условия (goto exist)?
Можно, как когда-то тут это (примерно) уже делалось, создать в файле список всех файлов .exe и проверить в нем с помощью команды find количество строк, но проще сделать иначе:

for /r %%i in (.) do if exist "%%i\*.exe" goto exist

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

Если надо исключить из проверки какой-то известный файл, например, rw.exe, то проще всего опять же предварительно переименовать его. Если где этот файл находится, неизвестно, то можно аналогично пройтись по всем папкам, пытаясь в каждой найти и, если он есть, переименовать этот файл - но это, скорее всего, не нужно.

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

Хотя и можно придумать что-то типа

dir /b /a-d /s *.exe > list.txt

copy list.txt list1.txt

for /f "delims=" %%i in (list.txt) do if not exist "%%~nxi" echo %%i >> list1.txt

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

dir /b /a-d *.exe > list.txt

copy list.txt + list1.txt

del list1.txt

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

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

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

for /r %%i in (.) do if exist "%%i\*.exe" goto exist

Этоа команда почему-то не работает :g: - Когда я убрал точку из скобок, и оставил их пустыми:

for /r %%i in () do if exist "%%i\*.exe" goto exist

То команда сработала :D

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

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

Хотя и можно придумать что-то типа

dir /b /a-d /s *.exe > list.txt

copy list.txt list1.txt

for /f "delims=" %%i in (list.txt) do if not exist "%%~nxi" echo %%i >> list1.txt

dir /b /a-d *.exe > list.txt

copy list.txt + list1.txt

del list1.txt

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

dir /b /a-d /s *.exe > fileslist.tmp

dir /b /a-d *.exe > fileslist1.tmp

Но когда я вывожу эти два файла на экран:

type fileslist.tmp

type fileslist1.tmp

То и в первом списке, и во втором, присутствует программы которые в текущем каталоге, только в первом списке они прописанны как полный путь, а во втором просто имя самого файла.

Хотя мой вариант можно и ещё упростить:

dir /b /a-d /s *.exe> filelist.tmp

echo.>> filelist.tmp

dir /b /a-d *.exe>> filelist.tmp

type filelist.tmp

-Тут, команда echo.>> filelist.tmp, присутствует просто как разделитель между списками!

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

P.S:

Батник который я пытаюсь сделать (хотя я уже сделал его, только осталась одна проблема), скорее всего можно будет упростить, но на этом этапе, после батника для переключения аттрибутов папки, это самый сложный батник который я когда либо делал. Когда я его выложу тут, станет ясно, к чему все эти путаницы и ухищрения :g: .

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...