Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] ВВести имя файла в переменную.

Ответить
Настройки темы
Любой язык - [решено] ВВести имя файла в переменную.

Пользователь


Сообщения: 71
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Димончик555
Дата: 10-03-2014
Хочу ввести имя .asm файла находящегося в одной папке с батником в переменную.

PHP код: Выделить весь код

set filename=Dir //A:-%~dp0*.asm

ECHO filename
ECHO %filename%
set masm_path=masm32
if exist %filename%.rc (
%
masm_path%binrc /%filename%.rc
%masm_path%bincvtres /machine:ix86 %filename%.res
%masm_path%binml  /Cp /Gz /I%masm_path%include/coff  %filename%.asm  || pause exit
%
masm_path%binLink/LIBPATH:%masm_path%lib %filename%.obj %filename%.res 
pause
) else (
%
masm_path%binml /Cp /Gz /I%masm_path%include %filename%.asm  || pause exit
%
masm_path%binLink /LIBPATH:%masm_path%lib %filename%.obj
)
pause 

http://firepic.org/?v=6.2014-03-09_von8k0lym070.jpg

Отправлено: 23:56, 09-03-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Димончик555:
Хочу ввести имя .asm файла находящегося в одной папке с батником в переменную. »
Первого из найденных «*.asm»:
Код: Выделить весь код
@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
P.S. Выберете какой-нибудь нормальный хостинг изображений, либо научитесь корректно выбирать и вставлять правильные ссылки. На приведённом изображении трудно разобрать что-либо осмысленное.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:25, 10-03-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 71
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо!!!

Отправлено: 00:57, 10-03-2014 | #3


Пользователь


Сообщения: 71
Благодарности: 1

Профиль | Отправить PM | Цитировать


Можете ли обьяснить, как этот код работает? Как- бы целые фразы
setlocal enableextensions enabledelayedexpansion
do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi

Неужели это действующие части кода?

Отправлено: 01:29, 10-03-2014 | #4


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Димончик555:
Как- бы целые фразы
setlocal enableextensions enabledelayedexpansion »
Код: Выделить весь код
setlocal /?
Цитата Димончик555:
do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi »
Здесь три конструкции — «for /f», «if», «set» и вложенная команда:
Код: Выделить весь код
for /f "usebackq delims=" %%i in (
	`dir /b /a:-d "%~dp0*.asm" 2^>nul`
) do if not defined sFirstAsmFile set sFirstAsmFile=%%~nxi
читать дальше »
Помощь читается так же:
Код: Выделить весь код
for /?
if /?
set /?

Суть такова: получив stdout команды «dir», разобрать его построчно. Для каждой строки проверяется условие — не определена ли переменная окружения «sFirstAsmFile»? На первом проходе разбора она ещё не определена, поэтому будет исполнена конструкция «set sFirstAsmFile=%%~nxi», которая присвоит переменной окружения «sFirstAsmFile» содержимое первой строки из stdout команды «dir». На втором и последующем проходах разбора условие не будет истинным, поскольку переменная окружения «sFirstAsmFile» была определена на первом проходе разбора («set sFirstAsmFile=…»), посему команда присвоения на этих проходах больше не исполнится. В результате мы получим на выходе «for /f …» содержимое первой строки из stdout команды «dir».

Для чистоты также можно на всякий случай очищать переменную окружения «sFirstAsmFile» перед циклом разбора «for /f»:
Код: Выделить весь код
set sFirstAsmFile=

for /f "usebackq delims=" %%i in ( …
— на тот случай, если Вы, например, не пользуете «setlocal» в своих пакетных файлах, или переменная «sFirstAsmFile» может вдруг достаться «по наследству» в унаследованном пакетным файлом окружении.


А что будет, если в каталоге не окажется вовсе ни одного файла «*.asm»? В данном примере сие решается следующим образом — stderr команды «dir» перенаправляется в пустое устройство, а stdout окажется в данном случае пуст. Поэтому переменная окружения «sFirstAsmFile» попросту окажется не определена. И нам остаётся только проверить этот факт аналогичным условием «if defined sFirstAsmFile …».
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:09, 10-03-2014 | #5


Пользователь


Сообщения: 71
Благодарности: 1

Профиль | Отправить PM | Цитировать


СПАСИБО!!!!

Отправлено: 11:08, 10-03-2014 | #6


Пользователь


Сообщения: 71
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо огромное!! Действительно, понятно!!

Отправлено: 19:36, 10-03-2014 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] ВВести имя файла в переменную.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход