Подтвердить что ты не робот

Как запустить пакетный пакет script без использования расширения *.bat

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

4b9b3361

Ответ 1

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

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

  • Доступ к параметрам пакетного файла через% 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

Выполните предыдущий файл следующим образом: 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!!! См. этот пост.

Антонио

Ответ 2

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

execu.cmd

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

то в toLaunch.txt поместите

@echo off
echo Hello!
pause > nul
exit

как пример, он "скомпилирует" код, затем он выполнит "выходной" файл, который просто "разбирает"

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

ren %0 %0.txt

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

Ответ 3

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

переменные окружения → добавить/изменить системную переменную для включения .cmd;.exe(конечно, ваш файл должен быть в пути)