Я хочу выполнить несколько команд cmd из текстового файла с помощью пакетного файла

#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.