Тролль Опубликовано 29 июня, 2006 Жалоба Поделиться Опубликовано 29 июня, 2006 (изменено) CreatoR: Этоа команда почему-то не работает - Когда я убрал точку из скобок, и оставил их пустыми:for /r %%i in () do if exist "%%i\*.exe" goto exist То команда сработала У меня работает в том виде, в котором я ее привел. Можешь посмотреть, что получается для пути к файлу в каждом из этих случаев, сделав так @echo off for /r %%i in (.) do if exist "%%i\*.exe" echo %%i pause и так @echo off for /r %%i in () do if exist "%%i\*.exe" echo %%i pause dir /b /a-d /s *.exe > list.txtcopy 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 но таким образом, достигается тот же результат, как и с примером который я привёл в своём позапрошлом посте Да, это из-за лишней команды copy во второй строке, она попала туда по недосмотру из первого моего наброска этого батника. Ее надо исключить, тогда все должно быть в порядке. Идея батника такая: из списка всех полных путей в файле list.txt отбираются в файл list1.txt только те полные пути, имена файлов из которых отсутствуют в текущем каталоге. Для этого каждый полный путь укорачивается до только имени файла, проверяется, есть ли этот файл в текущем каталоге, и если его там нет, то строка с полным путем копируется в файл list1.txt, так что в этом файле оказываются только полные пути к файлам, отсутствующим в текущем каталоге. А потом создается файл со списком имен (только имен!) файлов в текущем каталоге ( я использую для него тоже имя list.txt, затирая не нужное больше старое содержимое этого файла), и оба файла объединяются в один файл, точнее, файл list.txt сливается с файлом list1.txt. Как я заметил в постскриптуме к моему предыдущему посту, у этого способа есть одно ограничение: имена файлов текущего каталога должны быть уникальными, так как если в каком-то подкаталоге попадется файл с таким же именем, как в текущем каталоге, он будет принят за файл из текущего каталога и путь к нему не будет занесен в файл list1.txt. Если это важно, можно сформировать файл list1.txt немного сложнее: for /f "delims=" %%i in (list.txt) do if not "%cd%\%%~nxi"=="%%i" echo %%i >> list1.txt Тут для каждого файла проверяется совпадение полного пути из списка в list.txt и полного пути к этому файлу в текущем каталоге. Тогда даже для файлов с совпадающими именами пути окажутся разными и строка с полным путем к этому файлу все равно будет скопирована в файл list1.txt. Все остальное то же самое, то есть в исходном тексте надо заменить только строку for... (и, как написано выше, в любом случае надо убрать команду copy во второй строке). Изменено 29 июня, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 29 июня, 2006 Автор Жалоба Поделиться Опубликовано 29 июня, 2006 Тролль: У меня работает в том виде, в котором я ее привел. И у меня так работает :) - Поэтому прими мои искринние извинения! Я немного ошибъся во время выполнения тестов. Если это важно, можно сформировать файл list1.txt немного сложнее Очень важно!!! ОГРОМНОЕ :) :) Всё работает! скоро выложу батник над которым мы мучались довольно долго! (ну, может и не долго, но зато мучались :) ) Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 10 июля, 2006 Автор Жалоба Поделиться Опубликовано 10 июля, 2006 У меня тут пару вопросов накопилось :) : 1) Можно ли каким то образом, завершить запущенный процесс в системе? (именно батником). 2) Существуют ли какие-то утилиты (компиляторы ?), которые способны 'превратить' (скомпилировать) скрипт батника, в экзешник? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 июля, 2006 Жалоба Поделиться Опубликовано 10 июля, 2006 CreatoR: 1) Можно ли каким то образом, завершить запущенный процесс в системе? (именно батником). Для этого есть специальная утилитка от Марка Русиновичатут. Я предпочитаю ее упрощенный вариант kill, который прилагаю. Использование, например, для завершения работы текстового редактора: kill /f notepad.exe 2) Существуют ли какие-то утилиты (компиляторы ?), которые способны 'превратить' (скомпилировать) скрипт батника, в экзешник? BatToExeЕсть также что-то более примитивное (не разбирался) тут. kill.zip kill.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 10 июля, 2006 Автор Жалоба Поделиться Опубликовано 10 июля, 2006 Тролль: Спасибо за утилиты. Вот уж не думал что такие (по крайней мере для компиляции батника) утилиты существуют! :D У меня ещё вопрос всплыл: *Можно ли батником, считывать переменную из самого реестра? Т.е не при помощи ссылки на значение (%переменная%), а прямо с реестра брать, и проверять существование пути. Так как в системе, на одну и туже переменную, я создавал накладки (прописывание значении поверх) значении. Т.е получилось так, что в памяти существуют несколько значении на одну переменную, и когда я вывожу на экран (в командной строке) переменную: echo %переменная%, то отображается значение последней переменной (не то которое в текущее время установленно - в реетре, а то которое было присвоенно этой же переменной в предыдущий раз). И ещё, почему я немогу проверить существование значения перменной в файле? Т.е, допустим у меня в файле (test.tmp), прописана строчка (это путь к существующей папке, но также это значение переменной). И мне нужно через команду for, проверить по переменной, и если значение совпадает с прописанной строкой в файле, то должно что-то произойти (goto): Пример: for /f "delims=" %%I in (test.tmp) do if /i %%I==%переменная% goto exist echo not ok! pause exit :exist echo ok! pause Таким образом, если в файле test.tmp прописанна строка, которая является значением переменной (%переменная%), то запустив батник с таким содержанием, переход на метку не произойдёт, и будет сообщение (по echo): not ok! Вопрос: Как сделать подобную проверку, но именно переменной, так как проверить на существование пути по содержанию этого файла, мне не подходит (я помню как это делать ;) ), т.к при двух разных ситуациях, в этом файле будет прописан существующий путь, и действия должны быть при каждой ситуации разные. P.S: Я сделал для себя вывод: самое большее с чем мне не нравится сталкиваться (может это временно :D ), так это с кодировками, и конечно-же с переменными (хотя сама задумка функциональности переменных мне нравится - чего немогу сказать о кодировках) - И вообще в программировании, думаю одна из главных проблем освоения сути программирования (не языка, а программирования в целом), является понимание того, как устроены (работают) переменные и кодировки (ИМХО). Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 июля, 2006 Жалоба Поделиться Опубликовано 10 июля, 2006 CreatoR: У меня ещё вопрос всплыл:*Можно ли батником, считывать переменную из самого реестра? Да можно, только все это запутано... Есть команда REG QUERY, которая читает из реестра, только ее выдача содержит много лишнего, что надо отфильтровывать... Для примера запишем что-нибудь в реестр: reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v ttt /t REG_SZ /d "zzz zzz" Тут мы записали в раздел реестра с переменными окружения новую переменную типа REG_SZ с именем ttt и значением zzz zzz Теперь я хочу прочитать ее значение. В принципе можно вывести, как мы раньше делали, результат выполнения REG QUERY в файл, но я сделаю немного компактнее: for /f "tokens=2,*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v ttt') do echo %%b Тут я вместо файла для разбора поставил в одинарных кавычках команду, выдача которой разбирается вместо файла. Это аналогично использованию конвейера (|) для передачи результата выполнения одной команды в другую, там тоже якобы используется временный безымянный файл. Результат выполнения reg query - несколько строк, если посмотреть ее выдачу "живьем", то можно увидеть, что значение параметра реестра, представляющего переменную окружения, является третьим элементом последней строки. Этот элемент вытаскивается в переменную %%b указанием "tokens=2,*" , которое помещает 2-й элемент строки в переменную %%a, а для всего оставшегося в строке, обозначаемого знаком *, создает переменную &&b, в которую и помещает этот остаток. В итоге получаем тестовый батник reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v ttt /t REG_SZ /d "zzz zzz"for /f "tokens=2,*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v ttt') do echo %%b который помещает в реестр системную переменную ttt со значением zzz zzz, а потом считывает и выводит ее значение. Уф... Две строки написали... И ещё, почему я немогу проверить существование значения перменной в файле?Можешь. Копировать твой пример не буду, он почти правилен, только ты не учел возможности существования в значении переменной %переменная% пробелов. Запиши вместо for /f "delims=" %%I in (test.tmp) do if /i %%I==%переменная% goto exist команду for /f "delims=" %%I in (test.tmp) do if /i "%%I"=="%переменная%" goto existи все будет так, как ты хочешь. А еще лучше вместо %переменная% использовать %variable% или, совсем хорошо, %var%. И вообще в программировании, думаю одна из главных проблем освоения сути программирования (не языка, а программирования в целом), является понимание того, как устроены (работают) переменные и кодировки (ИМХО).Тут я, пожалуй, не соглашусь. Переброска данных между различными программами или скриптами просто не задача переменных окружения. Они предназначены только для передачи данных сверху вниз или внутри скрипта. А кодировки предназначены только для представления пользователю окончательного результата, но не для самих программистов. К тому же русский язык вообще уникален количеством разнообразных кодировок, поскольку переводы программ на русский язык делались одновременно разными организациями по принципу "после нас хоть потоп", а попытки введения стандарта напоминали попытки обязать всех зверей летать. Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 11 июля, 2006 Автор Жалоба Поделиться Опубликовано 11 июля, 2006 (изменено) Тролль: только ты не учел возможности существования в значении переменной %переменная% пробелов. Я пробовал и с кавычками, просто забыл добавить их в пример :D . Даже с кавычками ничего не получается, и для подтверждения этого факта, привожу ещё один пример. В котором, первая строка задаёт переменную с именем var, и со значением C:\Windows. Вторая строка, передаёт значение переменной в файл (test.txt), затем сравнивается содержимое этого файла со значением переменной (хотя по-моему этого не происходит), и если есть совпадение, то происходит переход на метку :exist где выводится сообщение ok!. В противном случае, перехода на метку не просходит, и выводится сообщение not ok! - что в принципе и происходит если запустить батник с таким содержанием: @echo off reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var /t REG_SZ /d "C:\Windows" /f echo %var% > test.txt for /f "delims=" %%I in (test.txt) do if /i "%%I"=="%var%" goto exist echo not ok! pause goto ext :exist echo ok! pause :ext reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var /f Последнею строку я поставил для удаления переменной, которую создал сам батник в начале скрипта, это чтобы не засорять реетер :) . Как видишь, оказалось что таким образом, не действует команда так как от неё ожидалось, и я немогу понять почему :) . Но вот зато применяя тот способ, который ты привёл для считывания переменной из реестра, я очень хорошо справился с данной задачей: @echo off reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var /t REG_SZ /d "C:\Windows" /f echo %var% > test.txt for /f "tokens=2,*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var') do for /f "delims=" %%I in (test.txt) do if /i "%%I"=="%%b" goto exist echo not ok! pause goto ext :exist echo ok! pause :ext reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var /f При запуске батника с таким содержанием, выводится сообщение ok! P.S: Но всё же интересно, почему команда (та, которую я привёл в своём примере в прошлом посте - где я забыл кавычки прописать), не срабатывает так, как от неё ожидалось? :) Изменено 11 июля, 2006 пользователем CreatoR Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 11 июля, 2006 Автор Жалоба Поделиться Опубликовано 11 июля, 2006 Создаю новый пост, так как не хочю чтобы была путаница, и недопонимания (в силу того, что добавленное мной в тот-же пост будет не замечено). Оказывается, даже так как я привёл в последнем примере (там где я утвердил что он работает), тоже не работает - Мои убиждения что тот вариант сработал, основывались на маленькой ошибке, при которой он просто обязан был работать: Ошибка заключается в неверном написании переменных - В начале, я написал так: "%%b"=="%var%", но при таком условии мой пример будет работать вне зависимости от содержимого в файле test.tmp - А затем, я изменил (подкорректировал пост) написание этих переменных на то как они сейчас прописаный ("%%I"=="%%b"). Но даже и сейчас не работает мой пример, у меня вообще в файл, записываются иероглифы (я полагаю, что это кириллическое сообщение о том, что отображение команд (ECHO) отключено), и следовательно мой пример не срабатывает Что же делать, никак не пойму, может у меня что-то с системой :D Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 июля, 2006 Жалоба Поделиться Опубликовано 11 июля, 2006 CreatoR: Я пробовал и с кавычками, просто забыл добавить их в пример. Даже с кавычками ничего не получается, и для подтверждения этого факта, привожу ещё один пример. "Еще один пример" совсем не похож на первый, им займемся позже. Начнем с первого примера. Прикладываю тестовый примерчик (твой исходный, подкорректированный кавычками), проверь его работу у себя. В файле test.txt у меня строка bb bb и батник выдает, в числе прочих, такую последовательность строк: C:\t>for /F "delims=" %I in (test.txt) do if /I "%I" == "bb bb" goto existC:\t>if /I "bb bb" == "bb bb" goto existC:\t>echo ok!ok! Как видишь, все работает. Сравни это с выдачей у тебя. Если появится разница, она подскажет, где ошибка. Теперь займемся вторым примером. первая строка задаёт переменную с именем var, и со значением C:\Windows. Вторая строка, передаёт значение переменной в файл (test.txt) Это разные переменные с одним и тем же именем. В програме могут одновременно существовать несколько переменных с одним и тем же именем, в разных блоках данных или даже внутри одного блока на разных уровнях его структуры. Выполни reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v var /t REG_SZ /d "C:\Windows" /f echo %var% pause и ты увидишь, что переменную var команда echo не видит (если только она не была уже создана еще в предшествующих запусках Windows). Почему? В момент создания батника ему (точнее, выполняющей его копии командного процессора) передается копия окружения. Именно с ней и работает echo, из нее она пытается взять несуществующую в этой копии переменную var (несуществующую потому, что когда эта копия окружения создавалась, переменной var еще не было и она в эту копию не попала). Все изменения в исходном окружении после этого на рабочую копию окружения никак не влияют. Но на самом деле все еще хуже. Исходное окружение было создано по содержанию реестра при загрузке Windows. Поэтому ты сравниваешь содержание измененного тобой в батнике реестра с содержанием копии его копии, причем первая копия была создана при запуске Windows, а вторая копия - с первой при запуске батника. Итак, есть три экземпляра переменной var, у каждого из которых может быть свое содержание. Естественно, проблема отцов и детей (строго говоря, даже не отцов, а дедов) тут же вылезает на свет Божий Поэтому при работе с переменными, и не только в bat-файлах, надо учитывать не только их имена, но и где они проживают, и какие между ними родственные связи. Впрочем, тут нет ничего нового - и разные файлы могут иметь одинаковые имена, и даже каталоги, почему бы не иметь одинаковые имена переменным? Это не сложнее обычной почтовой адресации, надо только знать, что она существует. В простых случаях мы работаем с переменными одного уровня. У себя на этаже я могу звать соседа Володя. Но на конверте адрес "на деревню дедушке", как у чеховского Ваньки, уже запросто приведет к ошибке, и все становится сложнее. t.zip t.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 11 июля, 2006 Автор Жалоба Поделиться Опубликовано 11 июля, 2006 (изменено) Тролль: Как видишь, все работает. Да, у меня так работает, просто в данном случае (если я правильно понял), переменная берётся из самого батника, и для текущего сенаса (батника, т.е во время его запуска), она актуальна, и вполне 'работоспособна' (как для выдачи по команде echo, так и для использования в других командах). Выполни......и ты увидишь, что переменную var команда echo не видит (если только она не была уже создана еще в предшествующих запусках Windows). Я кажется начинаю понимать как устроенны переменные , и если я правильно начел понимать, то для моей задачи, нет подходящего способа её выполнения (в том направлени, в котором я пытаюсь её решить). Тогда вопрос такой - есть ли какой-то другой способ , записать значение переменной в файл? (не обязательно созданную батником, хотя вероятно созданную во время текущего сеанса Windows). Т.е не через команду echo, ведь если я правильно понял, то проблема в том, что именно команда echo не способна считывать переменную так, как она присутствует в реестре, а не в памяти. Изменено 11 июля, 2006 пользователем CreatoR Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 июля, 2006 Жалоба Поделиться Опубликовано 12 июля, 2006 (изменено) CreatoR: есть ли какой-то другой способ , записать значение переменной в файл? (не обязательно созданную батником, хотя вероятно созданную во время текущего сеанса Windows). Т.е не через команду echo, ведь если я правильно понял, то проблема в том, что именно команда echo не способна считывать переменную так, как она присутствует в реестре, а не в памяти.Да, команда echo считывает переменные из текущей (рабочей) копии окружения. Если надо считывать значения из реестра, то пожалуйста, REG QUERY с фильтрацией с помощью FOR, я пример приводил. Если надо считывать из файла, то FOR /F (часто годится и просто перенаправление ввода < ). Запись же в файл командой echo осуществляется без проблем перенаправлением вывода по > или >> .Я кажется начинаю понимать как устроенны переменные Переменная - это просто именованная область памяти, которую характеризуют три свойства: начальный адрес в отведенной для хранения переменных области, длина и тип хранящегося в ней значения. Для переменных пакетных файлов их длины определяются хранящимися в переменных значениями, а тип у них всегда строка символов. У более сложных языков есть разные типы переменных с разными заранее заданными (или тоже автоматически определяемыми при присвоении значения) длинами и способами кодировки хранящихся в переменной данных. Программа может использовать несколько блоков данных, переменные в них могут иметь одинаковые имена. Если нужна переменная с таким же именем из другого блока, надо обращаться за ней в другой блок, для этого в разных языках существуют разные способы, как указать блок данных, в котором создается или из которого берется переменная. Вот и все. Что касается bat-файлов, то устанавливаемые по set переменные локальны, то есть они помещаются в рабочую копию окружения и уничтожаются после завершения работы bat-файла вместе с этой копией. Приоритет при разработке команды set отдавался принципу "не повреди Windows". Кроме созданных "самим для себя" переменных, bat-файлу доступны системные переменные Windows типа %windir% и т.п., точнее, их копии (чтобы не повредить исходные переменные), которые копируются в рабочую копию окружения при запуске bat-файла. Эти копии также будут уничтожены после завершения работы bat-файла. А если ты хочешь связать между собой данные, обрабатываемые разными bat-файлами, которые будут исполняться в разное время, то эти данные проще всего хранить в обычных файлах. Изменено 12 июля, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Добрый Опубликовано 13 июля, 2006 Жалоба Поделиться Опубликовано 13 июля, 2006 Доброго всем времени. У меня простой, как я надеюсь, вопрос. Как сделать чтобы при выполнении команды дир с направлением в файл, в файле отображались папки на понятном русском языке, а не закарючками. Всем зарание спасибо:) да винда хп сп2 русск. Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 13 июля, 2006 Автор Жалоба Поделиться Опубликовано 13 июля, 2006 Добрый: Как сделать чтобы при выполнении команды дир с направлением в файл, в файле отображались папки на понятном русском языке, а не закарючками. Думаю эту проблему решит установка кодовой страницы в самом батнике: chcp 1251dir > file.txt Тут, команда chcp 1251, задаёт текущую кодовую страницу, исполняемого пакетного файла (батника). P.S: Можно в командной строке (Пуск -> Выполнить -> вписать cmd.exe), написать chcp /?, для информации этой команды. А также свойства этой команды (и других использумых для изминении кодировок), уже описывалось в начале этой темы, начиная с этого поста - http://www.softboard.ru/index.php?showtopic=34362# Тролль: Всё, огромное спасибо за столь исчерпывающее объяснение по поводу переменных, этот вопрос можно считать закрытым! Ссылка на комментарий Поделиться на другие сайты Поделиться
Добрый Опубликовано 14 июля, 2006 Жалоба Поделиться Опубликовано 14 июля, 2006 2 CreatoR: Пасиб:D прост вы выше такие заумные темы обсуждали что мне дАже не пришло в голову заглянуть в начало с моим простеньким как мне казалось вопросом :D чем будет отличаться chcp 1251 этот вариант от MODE CON CP SELECT=1251 этого??? Если будет:) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 июля, 2006 Жалоба Поделиться Опубликовано 14 июля, 2006 Добрый: Кроме длины команды, ничем. Это более старый способ установки кодовой страницы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Добрый Опубликовано 14 июля, 2006 Жалоба Поделиться Опубликовано 14 июля, 2006 Благодарю:) Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 21 июля, 2006 Автор Жалоба Поделиться Опубликовано 21 июля, 2006 Появились у меня следующие два вопроса :sm(100): : 1) Можно ли каким-то образом, батником, записать содержимое буффера обмена (картинку) в файл (*.bmp)? 2) Можно ли батником, имитировать нажатие клавишь клавиатуры? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 21 июля, 2006 Жалоба Поделиться Опубликовано 21 июля, 2006 (изменено) CreatoR: 1. Не знает батник ничего о формате bmp, да и вообще о графике. В принципе это можно делать через графический редактор, как у тебя в примере с VBS, но тогда это сводится к посылке в него нужных кодов, т.е. к вопросу 2. 2. Опять же этого нормально нет. Существуют, правда, специальные утилиты, но их надо искать. Например, Keyboard . А там еще надо разбираться с вводом кодов специальных клавиш. Ведь в Windows заплата на заплате, поэтому все, в том числе коды нажатых клавиш, проходит цепочку преобразований. Эволюция... Проще, кстати, при использовании таких утилит не пользоваться сочетаниями типа Ctrl+V, а переходить в меню Paint вводом кода клавиши F10, а затем подчеркнутых букв из нужных для вставки из буфера обмена пунктов меню. Но все же не надо упорно придумывать, как завинчивать шурупы молотком. Мозги достойны лучшего применения. Когда-то надо осваивать новые инструменты. Надо переходить на VBS или вообще на обычные языки программирования. Изменено 21 июля, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Симаргл Опубликовано 24 августа, 2006 Жалоба Поделиться Опубликовано 24 августа, 2006 Тролль: Возник у меня такой простенький вопрос. Возьмем bat-файл => содержания: rem выводим текущий путь в фаил cd > c:\path.txt cd c:\TEMP del *.* /f /s /q rem переходим обратно cd < c:\path.txt Вопрос почему он обратно переходить не хочет? Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 24 августа, 2006 Автор Жалоба Поделиться Опубликовано 24 августа, 2006 Симаргл: Вопрос почему он обратно переходить не хочет? Можно перейти таким образом (хотя хотел бы тоже узнать более короткий способ) : rem выводим текущий путь в фаилcd > c:\path.txt cd c:\TEMPdel *.* /f /s /qrem переходим обратноfor /f "delims=" %%i in (c:\path.txt) do cd "%%i" Ссылка на комментарий Поделиться на другие сайты Поделиться
Симаргл Опубликовано 24 августа, 2006 Жалоба Поделиться Опубликовано 24 августа, 2006 команда < [путь]имя_файла Ввод команды поступает из заданного файла Нашел в книге, но без примера... CreatoR: твой пример работает Почему, интересно, перенаправление не работает в обратню сторону? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 августа, 2006 Жалоба Поделиться Опубликовано 24 августа, 2006 (изменено) Симаргл: Разбор полетов: cd > c:\path.txt вывели путь к текущей папке в файл c:\path.txt cd c:\TEMP попытка сделать текущей на диске c: папку c:\TEMP, если она существует del *.* /f /s /q зависит от того, с какого диска запускался пакетный файл, если с диска c:, то уничтожаем все файлы в папке c:\TEMP и ее подпапках; если такой папки не было или пакетный файл запускался не с диска c:, то уничтожаем к чертям все файлы в папке, из которой запускался пакетный файл и ее подпапках cd < c:\path.txt попытка послать в команду cd параметр, который она не просила и получать не умеет; соответственно параметр игнорируется, а команда выдает на экран положение текущей папки Вопрос почему он обратно переходить не хочет? Ответ: в cd заслать путь перехода нельзя, надо формировать целиком команду cd вместе с путем в пакетном файле и затем запускать этот файл. Или формировать команду cd с параметром и сразу запускать ее в команде for, как это сделал CreatoR - это красивее, но требует умения использовать довольно сложную команду for. И зачем все эти страсти? Достаточно одной команды del C:\TEMP\*.* /f /s /q P.S. Немного поясню еще насчет параметра, который cd получать не умеет: перенаправление ввода < годится для команд, которые при выполнении, уже будучи запущены, прерывают свое выполнение, дожидаясь ввода с клавиатуры. Тогда < подсовывает им вместо ввода с клавиатуры содержание файла. Изменено 24 августа, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Симаргл Опубликовано 24 августа, 2006 Жалоба Поделиться Опубликовано 24 августа, 2006 Тролль: И зачем все эти страсти? Ну не просто же так из каталога в каталог прыгать, а я еще попутно доброе дело сделал... :) Достаточно одной команды del C:\TEMP\*.* /f /s /q Да. Знаю. Цель моего вопроса выяснить про перенаправление. Thaks! Теперь понятно стало! Примером такой команды может быть netsh < c:\par.txt Где par.txt содержит interface ip show tcpstats Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 августа, 2006 Жалоба Поделиться Опубликовано 24 августа, 2006 CreatoR: хотел бы тоже узнать более короткий способ Ну, если брать данный случай, то проще можно было так: set tt=%CD% cd C:\TEMP ... cd "%tt%" Ссылка на комментарий Поделиться на другие сайты Поделиться
CreatoR Опубликовано 25 августа, 2006 Автор Жалоба Поделиться Опубликовано 25 августа, 2006 Тролль: Как-то, я спрашивал про паузу в батнике... так вот, почему-то команда которую ты мне посоветовал (ping -n 5 localhost > nul), делает задержку немного больше чем на 5 секунд (где-то на 15). Есть другой способ, более надёжный для этой цели? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения