Я нуб, пытающийся выяснить, как упростить этот создаваемый мной файл .bat (сортирует фильмы в другую алфавитную папку), чтобы в нем было гораздо меньше строк. Я хочу, чтобы он использовал цикл (ы), который циклически перебирает весь алфавит, а не цифры 0-9. Любая помощь по этому вопросу будет принята с благодарностью.

setlocal EnableDelayedExpansion
::REN Need this for loop with !var! I think
TITLE Automated Symlink Session
set alphachar=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
:SYMSTART
REN Change directory than find all files in "C:\Movies\" than output to the file named list
cd /d "C:\Movies\"
Dir A* /b > list
REN for each line of the file named list do an mklink and output it to Categorized folder under corresponding letter
for /F "usebackq delims==" %%i in ("C:\Movies\list") do set &(mklink /d  "C:\Categorized\A\%%i" "C:\Movies\%%i")

Dir B* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\B\%%i" "C:\Movies\%%i")

Dir C* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\C\%%i" "C:\Movies\%%i")

Dir Z* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\Z\%%i" "C:\Movies\%%i")

Dir 1* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\#\%%i" "C:\Movies\%%i")

Dir 9* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\#\%%i" "C:\Movies\%%i")

Dir 0* /b > list
for /F "usebackq delims==" %%i in ("C:\Movies\list") do (mklink /d  "C:\Categorized\#\%%i" "C:\Movies\%%i")
REN Clean up
del "C:\Movies\list"
:SYMEND
ECHO Symlinking Complete
Pause

3 ответа3

0

Чтобы просто напечатать az, а затем 0-9:

@echo off
setlocal enabledelayedexpansion
set loop=abcdefghijklmnopqrstuvwxyz0123456789
for /l %%i in (0,1,35) do echo !loop:~%%i,1!

Чтобы сохранить счетчик цикла в переменной, чтобы вы могли получить к нему доступ:

@echo off
setlocal enabledelayedexpansion
set loop=abcdefghijklmnopqrstuvwxyz0123456789
for /l %%i in (0,1,35) do (
    set lc=!loop:~%%i,1!
    echo !lc!
)
0

В конце концов я отказался от использования оператора For внутри заданной части командной строки. Что бы я ни делал, это не сработало. Это то, с чем я столкнулся для тех, кто пытается сделать то же самое.

For %%M in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #) do (mkdir "C:\My Videos\Categorized\"%%M)
For %%N in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ((Dir "G:\My Videos\TV Shows\"%%N* /b) >> "C:\My Videos\List\%%N.lst") 
For %%O in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (For /F "usebackq delims==" %%P in ("C:\My Videos\List\%%O.lst") do (mklink /d  "G:\My Videos\Categorized\%%O\%%P" "G:\My Videos\TV Shows\%%P"))
For %%L in (0 1 2 3 4 5 6 7 8 9) do ((Dir "G:\My Videos\TV Shows\"%%L* /b) >> "G:\My Videos\List\#.lst")
For /F "usebackq delims==" %%Q in ("G:\My Videos\List\#.lst") do (mklink /d  "G:\My Videos\Categorized\#\%%Q"

Возможно, это может быть даже короче, но это намного лучше, чем 36+ линий, с которыми мне приходилось иметь дело раньше

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

FOR /D %variable IN (FOR /D %variable IN (set) DO command [command-parameters]) DO command [command-parameters]
0

Будет ли это делать то, что вы хотите. Очевидно, установить локальный То есть все одной строкой. извините, я новичок здесь, но написал командные файлы уже 25 лет.

For %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9) do For /F "usebackq delims==" %%k in ('dir C:\Movies\%%i* /b') do (mklink /d  "C:\Categorized\%%i\%%k" "C:\Movies\%%k")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .