![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] ВВести имя файла в переменную. |
|
Любой язык - [решено] ВВести имя файла в переменную.
|
Пользователь Сообщения: 71 |
Хочу ввести имя .asm файла находящегося в одной папке с батником в переменную.
http://firepic.org/?v=6.2014-03-09_von8k0lym070.jpg |
|
Отправлено: 23:56, 09-03-2014 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Димончик555:
@echo off setlocal enableextensions enabledelayedexpansion for /f "usebackq delims=" %%i in ( `dir /b /a:-d "%~dp0*.asm" 2^>nul` ) do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi if defined sFirstAsmFile ( echo First *.asm file: [%sFirstAsmFile%]. ) else ( echo Not found any *.asm files. ) endlocal exit /b 0 |
|
Отправлено: 00:25, 10-03-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 71
|
Профиль | Отправить PM | Цитировать Спасибо!!!
|
Отправлено: 00:57, 10-03-2014 | #3 |
Пользователь Сообщения: 71
|
Профиль | Отправить PM | Цитировать Можете ли обьяснить, как этот код работает? Как- бы целые фразы
setlocal enableextensions enabledelayedexpansion do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi Неужели это действующие части кода? |
Отправлено: 01:29, 10-03-2014 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Димончик555:
Цитата Димончик555:
for /f "usebackq delims=" %%i in (
`dir /b /a:-d "%~dp0*.asm" 2^>nul`
) do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi
Суть такова: получив stdout команды «dir», разобрать его построчно. Для каждой строки проверяется условие — не определена ли переменная окружения «sFirstAsmFile»? На первом проходе разбора она ещё не определена, поэтому будет исполнена конструкция «set sFirstAsmFile=%%~nxi», которая присвоит переменной окружения «sFirstAsmFile» содержимое первой строки из stdout команды «dir». На втором и последующем проходах разбора условие не будет истинным, поскольку переменная окружения «sFirstAsmFile» была определена на первом проходе разбора («set sFirstAsmFile=…»), посему команда присвоения на этих проходах больше не исполнится. В результате мы получим на выходе «for /f …» содержимое первой строки из stdout команды «dir». Для чистоты также можно на всякий случай очищать переменную окружения «sFirstAsmFile» перед циклом разбора «for /f»: — на тот случай, если Вы, например, не пользуете «setlocal» в своих пакетных файлах, или переменная «sFirstAsmFile» может вдруг достаться «по наследству» в унаследованном пакетным файлом окружении. А что будет, если в каталоге не окажется вовсе ни одного файла «*.asm»? В данном примере сие решается следующим образом — stderr команды «dir» перенаправляется в пустое устройство, а stdout окажется в данном случае пуст. Поэтому переменная окружения «sFirstAsmFile» попросту окажется не определена. И нам остаётся только проверить этот факт аналогичным условием «if defined sFirstAsmFile …». |
|||
Отправлено: 02:09, 10-03-2014 | #5 |
Пользователь Сообщения: 71
|
Профиль | Отправить PM | Цитировать СПАСИБО!!!!
|
Отправлено: 11:08, 10-03-2014 | #6 |
Пользователь Сообщения: 71
|
Профиль | Отправить PM | Цитировать Спасибо огромное!! Действительно, понятно!!
![]() ![]() |
Отправлено: 19:36, 10-03-2014 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Найти в реестре параметр и записать в переменную имя ветки в которой он находится | root221 | Скриптовые языки администрирования Windows | 11 | 25-11-2012 07:54 | |
CMD/BAT - [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. | bobr95 | Скриптовые языки администрирования Windows | 8 | 10-04-2012 18:42 | |
Загрузка - [решено] При выходе системы из спящего режима требует ввести имя пользователя и пароль | DG1979 | Microsoft Windows 7 | 2 | 11-08-2011 16:07 | |
CMD/BAT - [решено] Имя файла из строки копируемого файла. | Seryoga204 | Скриптовые языки администрирования Windows | 20 | 16-03-2011 21:15 | |
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. | Nun-Nun | Скриптовые языки администрирования Windows | 6 | 13-05-2009 13:28 |
|