Пакетный скрипт проверяет файл на наличие строки в цикле IF DO - PullRequest
0 голосов
/ 15 октября 2018

новенький здесь и надеюсь, что это простой вопрос.У меня очень мало опыта в программировании и написании сценариев, но у меня до сих пор работают основы, и я застрял.

Логика того, что я пытаюсь выполнить с помеченными частями, с которыми мне нужна помощь;

  1. сканирует папку IP-камеры для поиска самого большого файла
  2. нужна помощь проверить этот файл по списку уже обработанных файлов
  3. переместить этот файл во временную папку Рабочая папка на ПК с хорошим процессором и SSD
  4. запустить HandBrake на немчтобы сжать его
  5. переместить готовый файл обратно в исходное местоположение
  6. удалить оригинал из временного рабочего каталога
  7. записать его имя файла в Processed.txt
  8. нужна помощь Цикл всего этого для бесконечной работы

Сейчас он отлично работает для сканирования и поиска самого большого файла и отправки его для обработки и перемещения обратно.Я хочу добавить проверку файла Processed.txt во время сканирования по размеру, поскольку очень часто самые большие файлы остаются самыми большими даже после сжатия (поэтому он застревает на одном и том же).По сути, я хочу иметь возможность бесконечно сканировать самые большие необработанные файлы и сжимать их один за другим.(У меня ТЫСЯЧИ, так что типичная пакетная обработка на самом деле не сработает)

Я пытался понять, как включить findstr в цикл for \ do, но я полностью потерян на этом.Я думаю взять текущую переменную% name%, запустить ее через findstr в файле Processed.txt и, если она совпадает, переместиться, если не сделать этот текущий самый большой файл.

вот что я работаю до сих пор, что мне удалось собрать воедино из других постов;

SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set path=

for /r D:\Cameras %%h in (*.*) do (
IF !tes! LSS %%~zh (
SET tes=%%~zh
SET name=%%~nh
SET path=%%~ph
SET ext=%%~xh
)
)

move "d:%path%%name%%ext%" "d:\Working\"

HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic

move "c:\Completed\%name%.mp4" "d:%path%%name%.mp4"
del "d:\Working\%name%%ext%"
echo !name! >> Processed.txt

Заранее спасибо, и всякая помощь очень ценится.

***** РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ ***** Так что я не мог заставить работать ниже, но это заняло у меня новое направление.В данный момент приведенное ниже, похоже, довольно близко к работе, но второй FOR DO IF, похоже, обрабатывается вне основного цикла.Может быть, кто-то может помочь исправить это, потому что это логика, которая я думаю, будет работать для меня.

Я извлекаю материал, который, как я знаю, работает, просто чтобы проверить, будет ли он сканировать, введите имя файла, а затем пропустите его в следующий раз для тестирования.

rem :start
SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set path=
set found=false

for /r d:\Cameras %%h in (*.*) do ( 
rem CALL :checkprocessed %%h
for /f %%x in (d:\Processed.txt) do (
IF "%%~nh" NEQ "%%~x" IF !tes! LSS %%~zh (
echo !tes! %%~zh %found% >> ifcheck.txt 
SET tes=%%~zh
SET name=%%~nh
SET path=%%~ph
SET ext=%%~xh
)
)
)

rem move "d:%path%%name%%ext%" "d:\Working\"
rem HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic
rem move "c:\Completed\%name%.mp4" "d:%path%%name%.mp4"
rem del "d:\Working\%name%%ext%"
echo !name! >> Processed.txt
rem goto :start


rem :checkprocessed
rem SET found=false
rem for /f %%x in (d:\Processed.txt) do IF "%%~nh" EQU "%%~x" (SET found=true & echo !found! >> found.txt & exit /b 0)
rem exit /b 0

1 Ответ

0 голосов
/ 18 октября 2018

Сначала я хочу поблагодарить @jwdonahue за помощь и время, потраченное на это.Идя туда-сюда с идеями, я смог заставить скрипт работать идеально!Ниже приведен рабочий скрипт, если кому-то это нужно.Я также исправил путь из комментариев других пользователей.Спасибо всем за помощь!

:start
SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set _path=
set ext=
set _found=false

for /r d:\Cameras %%h in (*.*) do (
for /f %%x in (d:\Processed.txt) do ( IF "%%~nh" EQU "%%~x" ( set _found=true) )
IF !_found! EQU false IF !tes! LSS %%~zh (
SET tes=%%~zh
SET name=%%~nh
SET _path=%%~ph
SET ext=%%~xh
)
set _found=false
)


move "d:%_path%%name%%ext%" "d:\Working\"
HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic
move "c:\Completed\%name%.mp4" "d:%_path%%name%.mp4"
echo !name! >> Processed.txt
echo !_path!,!name!!ext!,!tes! >> OrgSize.log
del "d:\Working\%name%%ext%"
goto :start
...