Выполнить команду в нескольких подпапках на cmd - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть много курсов в подпапках, которые я скачал в (C:\Users\[username]\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses), и я хочу запустить эту команду для всех подпапок в ldc_dl_courses, но у меня есть некоторые проблемы при создании командного файла для его запуска.

LyndaDecryptor /D “C:\Users\[username]\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses\143455” /DB “C:\Users\[username]\AppData\Local\lynda.com\Lynda.com Desktop App\db.sqlite” /OUT “C:\Users\[username]\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses\mp4”

Я попробовал это, но это не сработало

FOR /D %G IN ("C:\Users\salah\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses") DO LyndaDecryptor /D "C:\Users\salah\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses\%G" /DB "C:\Users\salah\AppData\Local\lynda.com\Lynda.com Desktop App\db.sqlite" /OUT "C:\Users\salah\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses\mp4" 

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018
FOR /D %G IN ("C:\Users\[u]\AppData\Local\lynda.com\Lynda.com Desktop App\offline\ldc_dl_courses\*") DO LyndaDecryptor /D "%G" /DB "C:\Users\[u]\AppData\Local\lynda.com\Lynda.com Desktop App\db.sqlite" /OUT "C:\Users\[u]\AppData\Local\lynda.com\Lynda.com Desktop App\offline\mp4"

это следующее рабочее решение

0 голосов
/ 28 апреля 2018

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

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LyndaAppFolder=%LocalAppData%\lynda.com\Lynda.com Desktop App"
set "CoursesFolder=%LyndaAppFolder%\offline\ldc_dl_courses"
for /D %%I in ("%CoursesFolder%\*") do if /I not "%%I" == "%CoursesFolder%\mp4" LyndaDecryptor.exe /D "%%I" /DB "%LyndaAppFolder%\db.sqlite" /OUT "%CoursesFolder%\mp4"
endlocal

Для меня неясно, является ли mp4 в папке курсов папкой или файлом. Я полагаю, что это папка, которую следует пропустить при обработке всех не скрытых подпапок в папке курсов, что является причиной дополнительного нечувствительного к регистру условия IF .

Команда FOR ищет из-за /D нескрытых каталогов в указанном каталоге, соответствующих шаблону с подстановочными знаками *, и присваивает имя найденному каталогу с полным путем без окружающих двойных кавычек переменной цикла I. Имя найденного каталога будет присвоено переменной цикла I без пути, если в круглых скобках будет использоваться только *, поскольку текущий каталог является каталогом, содержащим каталоги курсов.

Я полагаю, что LyndaDecryptor - это исполняемый файл с расширением файла .exe, к которому добавлено расширение файла в последней, кроме одной командной строке. Лучше всего было бы указать LyndaDecryptor с полным путем и с расширением файла, так как в этом случае интерпретатор команд Windows не должен искать исполняемый файл или скрипт с таким именем файла на каждой итерации цикла.

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

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • set /?
  • setlocal /?

См. Также статью в Википедии о Переменные среды Windows для предопределенной переменной среды LOCALAPPDATA, используемой в пакетном файле с использованием нотации CamelCase для лучшей читаемости, поскольку переменные среды не чувствительны к регистру в Windows по сравнению с FOR переменные цикла, которые чувствительны к регистру.

...