2012-11-10 3 views
21

Есть ли какой-либо метод в окне, через который мы можем выполнить пакетный скрипт без расширения .bat?Как запустить пакетный скрипт с использованием расширения * .bat

+4

Ну, вы могли бы переименовать его в '.cmd' файл ... –

+3

Сценарий должен иметь расширение (.BAT или .CMD), чтобы Windows знала, что это пакетный скрипт. Я не думаю, что можно определить собственное расширение, которое приравнивается к пакетному файлу, а также не может дать указание Windows использовать любой файл в виде пакетного сценария на лету. – dbenham

+0

@dbenham no bro, я не тестировал, я отвечаю через мой телефон. Но я считаю, что раньше у меня появились расширения .batch. Но я googled и нашел, что я ошибаюсь. Спасибо, что исправил меня. –

ответ

11

Это интересная тема для меня! Я хочу сделать некоторые замечания по этому поводу.

Важный момент: Пакетный файл - это файл с расширением .BAT или .CMD. Период. Пакетные файлы можно достичь, помимо выполнения обычных DOS команды, определенные специфические средства Batch-файл, в частности:

  • Доступ к параметрам пакетного файла через% 1% 2 ... и выполнение команды SHIFT.
  • Выполнение команды GOTO.
  • Выполнение команды CALL: NAME (внутренняя подпрограмма).
  • Выполнение команд SETLOCAL/ENDLOCAL.

Теперь смешная часть: любой файл может быть перенаправлен в качестве ввода для CMD.exe, поэтому содержащиеся в нем команды DOS выполняются аналогичным образом из Batch-файла с некоторыми отличиями. Самое главное, что предыдущие Пакетные файлы НЕ будут работать. Еще различия проиллюстрированы в NOT-Batch файл ниже (я назвал его BATCH.TXT):

@echo off 
rem Echo off just suppress echoing of the prompt and each loop of FOR command 
rem but it does NOT suppress the listing of these commands! 

rem Pause command does NOT pause, because it takes the character that follows it 
pause 
X 

rem This behavior allows to put data for a SET /P command after it 
set /P var=Enter data: 
This is the data for previous command! 
echo Data read: "%var%" 

rem Complex FOR/IF commands may be assembled and they execute in the usual way: 
for /L %i in (1,1,5) do (
    set /P line= 
    if "!line:~0,6!" equ "SHOW: " echo Line read: !line:~6! 
) 
NOSHOW: First line read 
SHOW: Second line 
NOSHOW: This is third line 
SHOW: The line number 4 
NOSHOW: Final line, number five 

rem You may suppress the tracing of the execution redirecting CMD output to NUL 
rem In this case, redirect output to STDERR to display messages in the screen 
echo This is a message redirected to STDERR >&2 

rem GOTO command doesn't work: 
goto label 
goto :EOF 
rem but both EXIT and EXIT /B commands works: 
exit /B 

:label 
echo Never reach this point... 

Чтобы выполнить предыдущий файл, введите: CMD/V: ON требуется < BATCH.TXT переключатель/V для обеспечения возможности отсроченного расширения.

Более специализированные различия связаны с тем, что команды в файле NOT-Batch выполняются в контексте командной строки , а не в контексте Batch-файла. Возможно, Дэйв или Джеб могли бы разобраться в этом вопросе.

EDIT:Дополнительные замечания (batch2.txt):

@echo off 
rem You may force SET /P command to read the line from keyboard instead of 
rem from following lines by redirecting its input to CON device. 

rem You may also use CON device to force commands output to console (screen), 
rem this is easier to write and read than >&2 

echo Standard input/output operations> CON 
echo/> CON 
< CON set /P var=Enter value: > CON 
echo/> CON 
echo The value read is: "%var%"> CON 

Execute предыдущий файл следующим образом: CMD < BATCH2.TXT> NUL

EDIT: Более дополнительные наблюдения (batch3.txt)

@echo off 

rem Dynamic access to variables that usually requires DelayedExpansion via "call" trick 

rem Read the next four lines; "next" means placed after the FOR command 
rem (this may be used to simulate a Unix "here doc") 

for /L %i in (1,1,4) do (
    set /P line[%i]= 
) 
Line one of immediate data 
This is second line 
The third one 
And the fourth and last one... 

(
echo Show the elements of the array read: 
echo/ 
for /L %i in (1,1,4) do call echo Line %i- %line[%i]% 
) > CON 

Выполнить этот файл обычным способом: CMD < BATCH3.TXT> NUL

Интересно! Не так ли?

EDIT: Теперь команды GOTO и CALL могут быть смоделированы в файле NotBatch.txt !!! См. this post.

Антонио

0

Это может быть возможно, да, но, вероятно, ни в легком пути =) вызывает в первую очередь .. безопасность. Я пытаюсь сделать то же самое год назад, а месяц назад, но я не нашел решения об этом.Вы можете попробовать сделать

execu.cmd

type toLaunch.txt >> bin.cmd 
call bin.cmd 
pause > nul 
exit 

затем в toLaunch.txt поставил

@echo off 
echo Hello! 
pause > nul 
exit 

так же, как, например, это будет "компилировать" код, то он будет выполнять " output ", то есть просто« разобрать »

вместо проанализированного вы также можете просто переименовать использование и, возможно, поместить авто переименование внутри скрипта, используя внутри toLaunch.txt

ren %0 %0.txt 

надеюсь, что это поможет!

0

в моем случае, чтобы сделать окна с файлами без расширения (только для * .cmd, * .exe), я пропустил переменную pathext (в системе varailbles), чтобы включить .cmd. После добавления у меня больше нечего запускать file.cmd, чем просто файл.

Переменные среды -> Добавить/изменить систему переменной включить .CMD; .exe (конечно ваш файл должен быть в пути)

Смежные вопросы