Пакетный скрипт uTorrent

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

Как это должно работать, так это то, что после завершения загрузки торрента он запускает скрипт и получает метку на торренте. Для тестирования я скачивал песню с лейблом Music. Когда он дойдет до :copyfile, он не переместит его в правильный каталог. Вместо того, чтобы перемещаться в F:\Completed Torrents\Music, он просто перемещается в F:\Completed Torrents.

Может кто-нибудь указать, что мне не хватает, потому что я уже просмотрел это трижды, и это сводит меня с ума. Скрипт ниже.

@echo off
title Liam's torrent-file script
rem Parameter usage: fromdir torrent-name label kind [filename]
rem corresponds to uTorrents flags: %D %N %L %K %F 
echo *********************************************
echo Run on %date% at %time%

set fromdir=%1
set name=%2
set label=%3
set kind=%4
set filename=%5
set savepartition="F:\Completed Torrents"
set winrar="C:\Program Files (x86)\WinRAR\WinRAR.exe"
set torrentlog="F:\Torrent Scripts\logs\torrentlog.txt"
set handledlog="F:\Torrent Scripts\logs\handled_torrents.txt"
set errorlog="F:\Torrent Scripts\logs\ErrorLog.txt"
set label_prefix=""

echo Input: %fromdir% %name% %label% %kind% %filename%

rem Check if the label has a sub label by searching for \
if x%label:\=%==x%label% goto skipsublabel
rem Has a sub label so split into prefix and suffix so we can process properly later
echo sub label
for /f "tokens=1,2 delims=\ " %%a in ("%label%") do set label_prefix=%%a&set label_suffix=%%b
rem add the removed quote mark
set label_prefix=%label_prefix%"
set label_suffix="%label_suffix%
echo.prefix  : %label_prefix%
echo.suffix  : %label_suffix%
goto:startprocess

:skipsublabel
echo Skipped Sub Label
goto:startprocess

:startprocess
echo %date% at %time%: Handling %label% torrent %name% >> %handledlog%

rem Process the label
if %label%=="Movies" goto known
if %label%=="Music" goto known
if %label_prefix%=="TV" goto TV


rem Last resort
rem Double underscores so the folders are easier to spot (listed on top in explorer)
echo Last Resort
set todir=%savepartition%\Unsorted\__%name%
if %kind%=="single" goto copyfile
if %kind%=="multi" goto copyall
GOTO:EOF

:known
echo **Known Download Type - %label%
set todir=%savepartition%\%label%\%name%
echo todir = %todir%
GOTO:process

:TV
echo **Known Download Type - %label%
set todir=%savepartition%\%label_prefix%\%label_suffix%
echo todir = %todir%
GOTO:process

:process
rem If there are rar files in the folder, extract them.
rem If there are mkvs, copy them. Check for rars first in case there is a sample.mkv, then we want the rars
if %kind%=="single" goto copyfile
if exist %fromdir%\*.rar goto extractrar
if exist %fromdir%\*.mkv goto copymkvs
if %kind%=="multi" goto copyall
echo Guess we didnt find anything
GOTO:EOF

:copyall
echo **Type unidentified so copying all
echo Copy all contents of %fromdir% to %todir%
xcopy %fromdir%\*.* %todir% /S /I /Y
GOTO:EOF

:copyfile
rem Copies single file from fromdir to todir
echo Single file so just copying
echo Copy %filename% from %fromdir% to %todir%
xcopy %fromdir%\%filename% %todir%\ /S /Y
GOTO:EOF

:copymkvs
echo Copy all mkvs from %fromdir% and subdirs to %todir%
xcopy %fromdir%\*.mkv %todir% /S /I /Y
GOTO:EOF

:extractrar
echo Extracts all rars in %fromdir% to %todir%. 
rem Requires WinRar installed to c:\Program files
if not exist %todir% mkdir %todir%
IF EXIST %fromdir%\subs xcopy %fromdir%\subs %todir% /S /I /Y
IF EXIST %fromdir%\subtitles xcopy %fromdir%\subtitles %todir% /S /I /Y
call %winrar% x %fromdir%\*.rar *.* %todir% -IBCK  -ilog"%todir%\RarErrors.log"
IF EXIST %fromdir%\*.nfo xcopy %fromdir%\*.nfo %todir% /S /I /Y
GOTO:EOF

EDIT Кроме того, по какой-то причине в строке 39 ничего не печатается в журнале. Для тех, кто хочет увидеть код с номерами строк: http://hastebin.com/juqokefoxa.dos


person Spedwards    schedule 10.01.2014    source источник
comment
в вашем коде больше строк с проблемами цитирования, чем правильных строк. И, как вы, возможно, знаете, SO — это место для 'professional and enthusiast programmers', а не для подражателей.   -  person Endoro    schedule 10.01.2014
comment
Похоже, у вас много операторов echo, показывающих события в процессе обработки. Теперь, прежде чем вы поделитесь ими с нами, мы будем в лучшем положении, чтобы помочь...   -  person Magoo    schedule 10.01.2014
comment
@Endoro Если вы читаете первую строку, основанную на другой. Я никогда не признавал себя профессионалом, но мне нравится программировать. Magoo К сожалению, это так не работает... Как только торрент заканчивается, он запускает пакетный скрипт. Независимо от того, сколько операторов паузы вы поместите в него, он просто их пропустит. Ты даже не видишь окна.   -  person Spedwards    schedule 10.01.2014
comment
Попробуйте сузить свой вопрос или сосредоточьтесь на конкретных строках, которые ведут себя не так, как ожидалось. Вы не можете ожидать хорошего ответа, если ваш вопрос состоит из сотни строк кода, а вы просто говорите, что он не работает. Например, есть много способов получить доступ к :copyfile, но у нас нет способа узнать, как он туда попал в вашем случае, поэтому мы не можем узнать значение %todir%. Попробуйте удалить весь ненужный код для вашего конкретного случая, а затем отредактируйте свой вопрос, чтобы вам нужно было указать не более дюжины строк кода. Скорее всего, к тому времени вы сами обнаружите проблему.   -  person Nate Hekman    schedule 10.01.2014
comment
См. Как создать минимальный, полный, допустимый пример.   -  person Nate Hekman    schedule 10.01.2014
comment
Прежде чем спросить   -  person Endoro    schedule 11.01.2014
comment
не уверен, что это поможет, но если utorrent все еще использует файл, он не позволит вам скопировать его в другой каталог. По крайней мере, это мой опыт. Обычно мне приходится останавливать торрент, а затем перемещать файл. не уверен, имеет ли это значение, когда вы делаете это по сценарию или нет.   -  person Glen Morse    schedule 13.01.2014


Ответы (2)


Пара битов для тебя:

1) Скорее всего, ваш скрипт не перемещает файлы. В настройках / каталогах есть возможность перемещать загрузки после их завершения. убедитесь, что эти настройки не перемещают файл.

2) uTorrent блокирует файлы по завершении, чтобы можно было продолжить раздачу. Чтобы изменить это поведение, перейдите в «Настройки» / «Дополнительно» и установите для параметра bt.read_only_on_complete значение false.

3) вы все равно будете сорваны, потому что «Запустить эту программу, когда торрент завершится» на самом деле не делает то, что говорит. Он запускает программу, когда загрузка достигает 100%, но при этом uTorrent все еще либо перемещает файл, либо раздает. См. мой отчет об ошибке здесь.

Краткий обзор поста, на случай, если этот пост будет удален: вы должны установить команду в «Запустить эту программу, когда торрент изменит состояние:», добавить параметр %S и проверить, что %S == 11

4) Просто совет из моей попытки сделать что-то очень похожее: когда вы устанавливаете переменные из аргументов, добавляйте тильду (%~1 вместо %1). Это удалит кавычки и позволит нам позже легко создавать командные строки с переменными.

person Drakkim    schedule 16.03.2015

Вы говорите, что журнал не записывается. Попробуйте это в качестве теста и посмотрите, пишет ли он в журнал.

Если этого не происходит, возникает какая-то другая фундаментальная проблема.

@echo off
title Liam's torrent-file script
rem Parameter usage: fromdir torrent-name label kind [filename]
rem corresponds to uTorrents flags: %D %N %L %K %F 
echo *********************************************
echo Run on %date% at %time%

set "fromdir=%~1"
set "name=%~2"
set "label=%~3"
set "kind=%~4"
set "filename=%~5"
set "savepartition=F:\Completed Torrents"
set "winrar=C:\Program Files (x86)\WinRAR\WinRAR.exe"
set "torrentlog=F:\Torrent Scripts\logs\torrentlog.txt"
set "handledlog=F:\Torrent Scripts\logs\handled_torrents.txt"
set "errorlog=F:\Torrent Scripts\logs\ErrorLog.txt"
set "label_prefix="

set "handledlog=%userprofile%\desktop\handled_torrents.txt"

>> "%handledlog%" echo Input: "%fromdir%" "%name%" "%label%" "%kind%" "%filename%"
>> "%handledlog%" echo %date% at %time%: Handling "%label%" torrent "%name%"
person foxidrive    schedule 11.01.2014
comment
К сожалению, это имеет те же результаты. :( - person Spedwards; 11.01.2014
comment
Тогда ваш пакетный файл не работает или у вашего файла журнала есть проблема с правами доступа. Попробуйте отредактированный выше код еще раз и посмотрите, создается ли файл журнала на вашем рабочем столе. - person foxidrive; 11.01.2014
comment
Я знаю, что пакетный файл запускается, потому что он выполняет часть сценария перемещения (просто не в нужную папку). - person Spedwards; 11.01.2014
comment
Нет, не работает. Если вы не протестировали вышеизложенное и не создали файл журнала. Если он не создает файл журнала, то, скорее всего, Utorrent самостоятельно перемещает файл в готовую папку. - person foxidrive; 11.01.2014