#batch-file
#пакетный файл
Вопрос:
Я создал текстовый файл со следующими командами.
cd..
cd <Folder location>
del *_extract.txt /Q
Теперь я хочу создать пакетный файл, который откроет cmd и выполнит команды, упомянутые в текстовом файле.
Созданный мной пакетный файл имеет следующее содержимое
@echo off
start "clear" cmd.exe -m <textfilelocation>
Комментарии:
1. Почему бы вам просто не переименовать свой
file.txt
вfile.bat
?
Ответ №1:
Самый простой способ, как сказал Стефан в комментарии. Переименуйте свой файл из .txt
в .cmd
или .bat
. Затем вы можете запустить его самостоятельно или просто call
из другого вашего пакетного файла как:
call "C:Some Locationfile.cmd"
Если вы действительно хотите сохранить текстовый файл, запустите цикл for:
@echo off
for /f "usebackq delims=" %%i in ("C:Some pathfile.txt") do %%i
Рассматривая текстовый файл с комментариями, возможно, в этом случае с помощью #
(который не является стандартом для пакетных файлов) мы можем выполнить строки, которые не являются комментариями.
@echo off
for /f "delims=" %%i in ('type "C:Some Pathfile.txt" ^| findstr /v "#"') do %%i
Ответ №2:
Лучшим вариантом является переименование файла в .bat
или .cmd
(или создание (временной) копии).
По какой-то причине это просто должен быть .txt
файл, ваши возможности очень ограничены.
Помимо предложения Герхарда (с for
циклом), возможно, лучшим вариантом является «подача» строк текстового файла в cmd
(не рекомендуется; предоставляется только по академическим соображениям):
<script.txt %comspec%
или без повторения команд и заголовка:
<script.txt %comspec% /q /k
Примечания:
- строки в script.txt должен быть синтаксис командной строки (например
for %a ...
, не синтаксис пакетного файлаfor %%a ...
) GOTO
иCALL :label
не будут работать (они не работают в командной строке)- «многострочная»
for
команда работает, но загромождает ваш выводMore?
приглашением на строку (не подавляется). - если требуется отложенное расширение, вам нужно добавить
/v:on
переключатель вcmd
команду (setlocal *
не влияет на командную строку)
Пример — script.txt
:
echo off
echo/
:start [ignored]
echo hello %username%
ping -n 1 www.google.com | find "TTL="
for %a in (alpha beta) do (
echo %a
)
goto :start [ignored]
echo done.
Вывод:
hello Stephan
Antwort von 172.217.21.206: Bytes=32 Zeit=12ms TTL=121
Mehr? Mehr? alpha
beta
done.