Компьютерный форум 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=292706)

besgranichni@vk 17-12-2014 20:44 2445159

Организация вывода файла на экран с предварительной проверкой.
 
Совсем не давно ознакомился с командными файлами, нужно выполнить задание:

3.1. Организовать просмотр заданного файла. (какого файла не указано, потому можно брать любой)

3.2. Предварительно следует проверить, задан ли при вызове параметр, если параметр не задан, то вывести соответствующее сообщение.

3.3. Предварительно следует проверить, существует ли указанный файл, если файл не существует, то вывести соответствующее сообщение.

Проблема в том что я понятия не имею что такое "Параметр", а в моем распоряжении лишь маленький вспомогательный лист - http://i.gyazo.com/4b609d35c2d813fefd06d663de5ec7db.png
Время поджимает, потому нет времени искать в созданных темах.

Iska 17-12-2014 21:19 2445170

Цитата:

Цитата besgranichni@vk
Проблема в том что я понятия не имею что такое "Параметр" »

Запустите командную строку. Наберите в ней:
Код:

cd /d "c:\Windows"
и нажмите «Enter». Произойдёт смена текущего каталога на «c:\Windows».

Затем наберите:
Код:

dir /b /a:-d /o:-n "*.exe"
и нажмите «Enter». В консоль будут выведены имена файлов с расширением «.exe», списком, отсортированные по алфавиту в убывающем порядке.

Так вот, здесь «cd» и «dir» — команды, а «/d», «"c:\Windows"», «/b», «/a:-d», «/o:-n» и «"*.exe"» — передаваемые им параметры. Точно так же передаются параметры в пакетный файл. В данном случае Вам нужно передать Вашему пакетному файлу один параметр, представляющий собой относительный или абсолютный путь к файлу, например:
Код:

"MyBatch.cmd" "C:\WINDOWS\win.ini"
В целом сие может выглядеть примерно так:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

if defined sSourceFile (
        if exist "%sSourceFile%" (
                more <"%sSourceFile%"
        ) else (
                echo Source file [%sSourceFile%] not found.
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
        exit /b 1
)

endlocal
exit /b 0


Сохраните приведённый код в файл с расширением «.cmd» (если будете использовать внутри пакетного файла кириллицу — сохраняйте в кодировке OEM/866). Вызывайте его из-под командной строки в вышеуказанном виде с параметром. Также можно просто перетянуть файл на пакетный файл в Проводнике.

Цитата:

Цитата besgranichni@vk
а в моем распоряжении лишь маленький вспомогательный лист - http://i.gyazo.com/4b609d35c2d813fefd06d663de5ec7db.png »

В Вашем распоряжении документация, встроенная справка:
Скрытый текст
Код:

help
call /?
echo /?
rem /?
goto /?


и интернет.

besgranichni@vk 17-12-2014 21:53 2445184

Iska, Меня вгоняет в тупик само задание.
Мне нужно создать батник, при запуске которого выводятся внутренности определенного файлика, при этом нужно заранее посмотреть наличие у него параметров. Так вот суть скорее не в том что такое параметр, а как мне создать батник выводящий определенный файл, то есть я сам должен его выбирать, я не знаю как мне задать выбор определенного файла во время работы батника, разве что на ум приходит система из if'ов, в которой постоянно спрашивают "Вам нужно вывести этот файлик?(y\n)", но и в этом случае я не знаком с if'ом, и не имею представления как описать это. И все же если удастся это создать, то что же такое "параметр"?, как я уже успел найти, параметр в батнике - это что-то вида "%?", то что вы, как раз, использовали в вашем примере.
Нашел основы, что такое параметр:

Скрытый текст
Код:

@echo off

rem Формируем файл с описанием команды,
rem имя которой передано параметром
help %1 > help.tmp

rem Загружаем файл описания в редактор Блокнот
notepad help.tmp



НО! - "имя которой передано параметром", и вот тут появляется вопрос "А что же собсна находится в параметре?", это что-то задаваемое вводом с клавиатуры? Или что-то вроде переменной которую надо объявлять и присваивать ей значение?

Мне бы методичку, нормальную.. Вопросов много - нервов у людей мало с:

Iska 17-12-2014 22:01 2445185

Цитата:

Цитата besgranichni@vk
Так вот суть скорее не в том что такое параметр, а как мне создать батник выводящий определенный файл, то есть я сам должен его выбирать, я не знаю как мне задать выбор определенного файла во время работы батника, »

Именно «в том». Вы некорректно понимаете термин «параметр». Параметр задаётся не «во время работы батника», а в момент его вызова указанием в командной строке после имени пакетного файла.

Вы приведённый выше код сохранили в пакетный файл? Имя пакетному файлу дали?

besgranichni@vk 17-12-2014 22:17 2445188

Iska, сейчас до меня стало доходить что вы не совсем правильно понимаете, что я не правильно понимаю, я думал что параметр будет проверяться у того самого "определенного файла" который мне надо будет вывести, как я сейчас понял, параметр будет задаваться в батнике, изначально. Тот код что я скинул детище не моих рук, это просто пример с одного из файлов, и привел я его только для того, чтобы показать вам с какой стороны я имею примерное понятие что такое параметр. И сейчас я конкретно не догоняю, как мне сделать проверку у батника на наличие параметров, к тому же я теперь не понимаю какой параметр мне нужно проверить, вернее.. даже не знаю как написать.. м.. Есть нечто что выглядит как "%?", а есть параметры у команд, и я не понимаю что из этого меня просят проверить и каким образом это осуществить. Надеюсь вы поняли корни моего непонимания, и если так, то не будет ли вам сложно написать программку с объяснением, что есть что, и как используется? В деле все становится намного понятнее, нежели в теории.

Iska 17-12-2014 22:53 2445195

Цитата:

Цитата besgranichni@vk
как мне сделать проверку у батника на наличие параметров, »

Например, так, как это сделано в вышеприведённом коде:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

if defined sSourceFile (
        if exist "%sSourceFile%" (
                more <"%sSourceFile%"
        ) else (
                echo Source file [%sSourceFile%] not found.
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
        exit /b 1
)

endlocal
exit /b 0

Цитата:

Цитата besgranichni@vk
к тому же я теперь не понимаю какой параметр мне нужно проверить, »

Первый переданный параметр («%1») в пакетный файл.

Цитата:

Цитата besgranichni@vk
вернее.. даже не знаю как написать.. м.. Есть нечто что выглядит как "%?", а есть параметры у команд, и я не понимаю что из этого меня просят проверить и каким образом это осуществить. Надеюсь вы поняли корни моего непонимания, и если так, то не будет ли вам сложно написать программку с объяснением, что есть что, и как используется? »

besgranichni@vk, с наскока мы с Вами никак не осилим, я чую. Слишком много самого элементарного вызывает у Вас вопросы. Попробуйте начать отсюда: НОУ ИНТУИТ | Учебный курс | Командная строка и сценарии Windows, вторая и третья лекции.

besgranichni@vk 18-12-2014 14:24 2445384

Iska, я смышленей чем кажусь, на свежую голову все стало куда яснее
Скрытый текст
Код:

@echo off
if "%1"=="%9" (echo Parametr  ne ustanovlen.)
if "%1"=="%9" goto end
if not exist %1 (echo Fila ne suchestvuet.)
if not exist %1 (goto end)
if exist %1 (echo File suchestvuet, osuchestvlyau prosmotr.)
type %1
:end


Я еще не знаком с "set", оставлю это на вечер.
А еще вопрос от том что такое параметр у меня возникал потому, что я не понимал где производится его ввод. То есть я понимал что такое параметр в общем, но откуда он берется, если он не указан в программе, не понимал. Кодик выше сделан не совсем корректно(имеется в виду случай с 9ю одинаковыми параметрами), но все же для начала мне этого будет достаточно. С командными файлами я познакомился буквально вчера, и сфера моих знаний лежит в рамках паскаля и эмулятора 8086, спасибо за лекции. Кстати еще один вопросик, как мне совместить две команды, для одного ифа? Чтобы выводилось сообщение через echo, и сразу переходило по метке? "|" не работает.

Iska 18-12-2014 14:49 2445395

Цитата:

Цитата besgranichni@vk
как мне совместить две команды, для одного ифа? »

Пример выше, где условие выделено красным, не наводит на размышления?

Georgio 18-12-2014 16:22 2445441

Код:

@echo off
if "%1"=="" (echo Parametr ne zadan.& goto end)
if not exist "%~1" (echo Fayla ne sushchestvuet.& goto end) else (echo Fayl sushchestvuet, osushchestvlyayu prosmotr.& type "%~1")
:end

,
или

Код:

@echo off
if "%1"=="" echo Parametr ne zadan.&& goto end
if not exist "%~1" (
 echo Fayla ne sushchestvuet.
 goto end
) else (
 echo Fayl sushchestvuet, osushchestvlyayu prosmotr.
 type "%~1"
)
:end

,
или...


...Sushchestvuet eshchyo mnogo variantov zapisi takogo koda.


Esli uzh ispol'zovat' transliteratsiyu, to khot' po kakomu-nibud' standartu:). besgranichni@vk, спасибо за точки в конце выводов команды "echo". Бальзам на душу: сам так делаю, так как стараюсь придерживаться лингвистических правил.


Время: 09:41.

Время: 09:41.
© OSzone.net 2001-