在cmd上的多个子文件夹上运行命令

时间:2018-04-27 06:11:33

标签: windows batch-file command-prompt

我在(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 :(得分:0)

我建议使用以下批处理文件执行此任务:

String authString = "username" + ":" + "password";
String authStringEnc = new BASE64Encoder().encode(authString.getBytes());

//Get the HTTP Header and set it like below.

objectXXX.header("Authorization", "Basic " + authStringEnc);"

//Call your service, now

我不清楚课程文件夹中的@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 是文件夹还是文件。我想这是一个文件夹,应该在处理课程文件夹中的所有非隐藏子文件夹时跳过,这是另外不区分大小写的 IF 条件的原因。

命令 FOR 搜索mp4,因为指定目录中的非隐藏目录与通配符模式/D匹配,并指定找到的目录的名称,其中包含完整路径而没有周围环境双引号循环变量*。如果只有I将在圆括号中使用,则找到的目录的名称将被分配给循环变量I,因为当前目录是包含课程目录的目录。

我认为*是一个文件扩展名为LyndaDecryptor的可执行文件,并在最后一个命令行上附加了文件扩展名。最好的方法是使用完整路径和文件扩展名指定.exe,因为在这种情况下,Windows命令解释程序不必在循环的每次迭代中搜索具有该文件名的可执行文件或脚本。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

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

另请参阅维基百科有关Windows Environment Variables的文章,了解批处理文件中使用的预定义环境变量setlocal /?,使用CamelCase表示法以提高可读性,因为与 FOR相比,环境变量在Windows上不区分大小写循环变量,区分大小写。

答案 1 :(得分:0)

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"

这是以下工作解决方案