Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] ВВести имя файла в переменную. (http://forum.oszone.net/showthread.php?t=278986)

Димончик555 09-03-2014 23:56 2321346

ВВести имя файла в переменную.
 
Хочу ввести имя .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

Iska 10-03-2014 00:25 2321353

Цитата:

Цитата Димончик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. Выберете какой-нибудь нормальный хостинг изображений, либо научитесь корректно выбирать и вставлять правильные ссылки. На приведённом изображении трудно разобрать что-либо осмысленное.

Димончик555 10-03-2014 00:57 2321364

Спасибо!!!

Димончик555 10-03-2014 01:29 2321377

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

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

Iska 10-03-2014 02:09 2321385

Цитата:

Цитата Димончик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 …».

Димончик555 10-03-2014 11:08 2321459

СПАСИБО!!!!

Димончик555 10-03-2014 19:36 2321699

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


Время: 00:47.

Время: 00:47.
© OSzone.net 2001-