Lote para criar um subdiretório para cada arquivo no diretório principal

1

Eu tenho um arquivo em lotes que percorre uma pasta, inserindo uma linha de texto em cada CSV em uma pasta e gerando um arquivo que conta as linhas de cada arquivo.

Eu também quero gerar um subdiretório na pasta principal para cada arquivo CSV, sem incluir a extensão ".csv". O código abaixo parece que deveria funcionar (funciona quando isolo as três linhas em seu próprio arquivo bat!), Mas no loop, ele retorna o mesmo valor para o nome da pasta em cada iteração do loop. Como faço a atualização da variável dirname com o valor atual?

copy NUL count.txt
for %%f in (*.csv) do (
    setlocal EnableDelayedExpansion
    set "cmd=findstr /R /N "^^" %%f | find /C ":""

        for /f %%a in ('!cmd!') do set number=%%a
        echo %%f   !number!>>count.txt

        SET filename=%%f
        SET dirname=%filename:~0,13%
        mkdir %dirname%

    type header.txt >%%f.new
    type %%f >>%%f.new
    move /y %%f.new %%f
 )
    
por 13ruce 26.07.2017 / 17:58

1 resposta

1

No loop, ele retorna o mesmo valor para o nome da pasta a cada iteração do loop

SET dirname=%filename:~0,13%

Você precisa usar a expansão atrasada como fez para o número:

SET dirname=!filename:~0,13!
por 26.07.2017 / 21:52