• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

[CMD] Как создать батник для обработки файлов определённого типа

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#1
задача такая: задается путь к файлам set "D=C:\Qt\pifagor\bin\repository\" и также есть батник для запуска одного файла с расширением .pfg:
CMD/BATCH:
set func_path=%func_name:.=\%

set repo_path=C:\Qt\pifagor\bin\

cd %repo_path%

cgen2 -f "%repo_path%repository\%func_path%\00.00\1.rig" "%repo_path%repository\%func_path%\00.00\1.cg%"
Надо сделать тоже самое, только чтобы не вводить название файла с расширением .pfg каждый раз, а взять все файлы с этим расширением из пути D, и запустить командой cgen2 -f
Как это сделать? Основная проблема в том, что я не знаю, как в цикле прописать изменяющиеся пути к файлам.
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#2
Здравствуйте!
Добро пожаловать на SafeZone!

батник для запуска одного файла с расширением .pfg:
не заметил там такого расширения. Вместо этого некий cg% с каким-то потерянным процентом.

а взять все файлы с этим расширением из пути D
Что такое путь D? (диск D?)

Рекурсивно? Или один уровень каталога?
 

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#3
Нет, D - это просто я так задала для удобства, чтобы ниже использовать. Вообще путь C:\Qt\pifagor\bin\repository\ Да, надо чтобы было рекурсивно.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#4
CMD/BATCH:
set "func_path=%func_name:.=\%"

set repo_path=C:\Qt\pifagor\bin\repository

cd /d "%repo_path%"

for /f "delims=" %%a in ('dir /b /s /a-d "%repo_path%\*.pfg"') do cgen2 ...
И вместо ... подставляете нужные опции. Там, где нужно подставлять имя файла, пишите "%%a"
Если перед обработкой файла, требуется обязательный переход в папку, в которой он находится, пишите в строке с циклом (после do) cd /d "%%~dpa" & cgen2 ...
 
Последнее редактирование:

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#5
спасибо, мне очень помогло. Но вот еще нужна ваша помощь. работа все с тем же файлом. Надо выбрать все файлы в которых содержится в названии слово "test". Вот я вывожу их таким образом:
CMD/BATCH:
@Echo off

cd C:\Qt\pifagor\bin\

set func_path=%func_name:.=\%

set repo_path=C:\Qt\pifagor\bin\repository

cd /d %repo_path%

for /f "delims=" %%a in ('dir /b /s /a-d "%repo_path%\*.pfg"') do @findstr /m "test" %%a

Pause
правильно?
Есть команда inter2 , которая на вход принимает названия типа test.op.point (это просто пример введенного названия программы, то есть программы через точку, а на деле они выглядят как файл в файле, то есть test\op\point).
Мне надо, чтобы командой inter2 запускать не сами файлы, а программы, с подобным названием, лежащие в этих файлах.
То есть, в приведенном выше мною bat файле выводятся файлы типа
1526986036218.png
а мне надо как-то их обрезать, чтобы получилось так: test\op\point, а потом еще заменить \ на .
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#6
Попробуйте так:

CMD/BATCH:
@echo off

SetLocal EnableExtensions EnableDelayedExpansion

set "repo_path=C:\Qt\pifagor\bin\repository"

for /f "delims=" %%a in ('dir /b /s /a-d "%repo_path%\*.pfg" ^| find /i "\test\"') do (
  set "v=%%~dpna"
  set "v=!v:*\test\=test\!"
  set "v=!v:\=.!"
  echo !v!
)

pause
Предупреждение: в данном коде знаки ! в именах обрабатывать невозможно.
 

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#7
Да, так правильно, но надо, чтобы в конце названия 00.00.1 (то есть это стоит в конце названия) тоже не выводилось, а только test\op\numb например. как их убрать?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#8
Как понять, по какому критерию их убирать? Кол-во символов? Кол-во слешей? ...
 

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#9
можно убрать по количеству слешей, то есть убрать 2 слеша с конца.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#10
CMD/BATCH:
@echo off

SetLocal EnableExtensions EnableDelayedExpansion

set "repo_path=C:\Qt\pifagor\bin\repository"

for /f "delims=" %%a in ('dir /b /s /a-d "%repo_path%\*.pfg" ^| find /i "\test\"') do (
  set "v=%%~dpa"
  for %%c in ("!v:~0,-1!") do (
    set "v=%%~dpc"
    set "v=!v:~0,-1!"
    set "v=!v:*\test\=test\!"
    set "v=!v:\=.!"
    echo !v!
))
pause
goto :eof
 
Последнее редактирование:

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#11
здравствуйте, при попытке запуска этого выдается ошибка "Не удается инициализировать устройство PRN"
 

Melancholie

Новый пользователь
Сообщения
7
Симпатии
0
#12
то есть у меня конечно выводятся нужные файлы, но и ошибка выводится. 1527589626648.png
а еще, подскажите, пожалуйста, куда мне мою команду inter для запуска с помощью нее такого рода файлов вписать?
Сообщения объединены:

от ошибки избавилась, но вопрос, куда мою команду записать, еще остался. заранее спасибо.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,819
Симпатии
5,687
#13
Вместо echo
 
Сверху Снизу