executa um loop em um comando com uma variável variável na linha de comando do Windows

0

Eu sou um noob tentando descobrir como simplificar esse arquivo .bat que estou criando (classificando filmes em outra pasta em ordem alfabética) para que ele tenha muito menos linhas. Eu quero que ele use loop (s) que percorre todo o alfabeto e que os números 0-9. Qualquer ajuda neste assunto seria altamente apreciada.

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
    
por Thomas 14.01.2013 / 03:14

3 respostas

0

Para simplesmente imprimir a-z e depois 0-9:

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

Para salvar o contador de loops em uma variável para que você possa acessá-lo:

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

Isso fará o que você quer. Obviamente, definir local Isso é tudo uma linha. desculpe, eu sou novo aqui, mas escrevi arquivos em lote por 25 anos agora.

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")
    
por 17.01.2013 / 09:21
0

Eu finalmente acabei desistindo de usar a instrução For dentro da parte do conjunto da linha de comando. Não importa o que eu fiz, não funcionou. Foi com isso que acabei com alguém tentando fazer o mesmo.

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"

Talvez isso possa ser ainda mais curto, mas é muito melhor do que as 36 linhas que eu tive que lidar antes

Isso é o que eu estava tentando fazer, mas a menos que outra pessoa possa mostrar uma que realmente funcione, eu não acho que ela faça

FOR /D %variable IN (FOR /D %variable IN (set) DO command [command-parameters]) DO command [command-parameters]
    
por 22.01.2013 / 06:35