Пакетный скрипт, выходящий из цикла For-Loop - PullRequest
0 голосов
/ 10 июля 2019

Программа завершается без предупреждения, как только запускает второй цикл FOR FOR /F %inputDir% %%F in (*.jpg) do

Я работаю на машине с Windows 10, перемещаю и переименовываю картинки

Я уже пытался поставитьв точках останова и флагах, но безрезультатно.Я даже пытался использовать фиктивную загрузку (только эхо, а затем сделать паузу) внутри цикла FOR (FL), так как откуда-то узнал, что пакет выполняет целые FL одновременно.Я НЕ пытался использовать отложенное расширение, но хотел бы узнать, как.

@echo off
echo LOADING CONFIG
cd "Batch stuff"
FOR /F "tokens=1,2 delims=&" %%A in (config.txt) do (
REM echo %%A
REM echo %%B
SET inputDir=%%A
SET outputDir=%%B
)
echo inputDirectory: %inputDir%
echo outputDirectory: %outputDir%

echo CONFIG LOADED
echo Continue?
pause





FOR /F %inputDir% %%F in (*.jpg) do (
echo here
pause
cls
echo openning: %%F
echo newName: 
SET /P newName=Enter a new name for this image: 
cls 
echo openning: %%F
echo newName: %newName%

echo Hit space to continue or exit the program (manually)
pause
REM CALL nameAndMove %%F %newName%


)

Ожидаемые результаты: при повторных запусках FL открывается картинка. Запрашивается очистка новых имен. Экран повторно отображает информацию (путь к файлу иnewName) и запрашивает подтверждающие вызовы в подпрограмму WIP (FL не работал, даже когда я не звонил в подпрограмму)

Я не вижу сообщений об ошибках, поскольку программа завершает работу до того, как я получаюшанс увидеть любого.Даже с функцией паузы после второго цикла FOR я все еще не могу заставить программу зависнуть.Я предполагаю, что это как-то связано с неправильным синтаксисом, поскольку FL не удалось с фиктивной загрузкой.

Filepath:

Filepath

1 Ответ

1 голос
/ 10 июля 2019

for /f не позволяет указать путь к каталогу, который вы пытаетесь сделать.Если вы хотите перебрать каталог (включая подпапки), вам понадобится for /r, например:

for /r "%inputDir%" %%A in (*.jpg) do (
    echo %%~nxA
)

Вам нужно будет использовать отложенное расширение, если вы собираетесь использовать каждый параметр каждыйвремя, в течение которого цикл повторяется (т. е. если вы хотите изменить имя каждого .jpg).Мой предпочтительный способ сделать это - назначить параметр как переменную, и тогда вы будете использовать восклицательные знаки, когда будете использовать эту переменную во время отложенного расширения:

setlocal enabledelayedexpansion
for /r "%inputDir%" %%A in (*.jpg) do (
    set "jpg=%%~nxA"
    echo I need to change the name of !jpg!
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...