Define o nome do arquivo como valor no CMD?

1

Eu quero criar uma opção no menu do botão direito dos arquivos que receberão o nome do arquivo. Meu problema agora, como definir o nome do arquivo como valor no CMD?

Eu tentei isso:

    @echo off
    for /r %%f in (*.bat) do (
    set w=%%~nxf
    echo %w%
    )
    pause

Mas w está vazio após a execução.

    
por Mehdi98 07.09.2013 / 11:31

1 resposta

3

bem, no meu sistema há um problema com o script em lote que descreverei, mas não sei por que o seu w está vazio depois da execução, mas se você remover o @echo, verá o que está acontecendo. e a partir desta explicação, talvez veremos porque está vazio. Deve ser a última configuração de w está definindo para nada.

    @echo off
    for /r %%f in (*.bat) do (
    set w=%%~nxf
    echo %w%
    )
    pause

Existe um problema acima, em que você está usando %...% em um loop for e o que acontece com %var% em um loop for, por exemplo %w% em arquivos batch, é muito estranho comparado a qualquer outra linguagem! O %w% será substituído por qualquer %w% e, depois, não novamente.

Você poderia tentar testar isso, definindo w = abcdefg e, em seguida, executar seu arquivo em lote e ver se w ainda é isso.

Mas na minha máquina, depois que ele estiver em execução, defina w=%%~nxf e, em seguida, você tenha eco %w% que %w% no eco, é definido como o valor atual de %%~nxf , que é seu primeiro Arquivo. E é isso. Permanece assim. Não é o que você pretende, sem dúvida, mas é o que acontece.

Aqui está o seu arquivo bat que eu removi @echo off.

for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)

Aqui está a saída mostrando o que acontece, que é o que eu descrevi. O% w% mantém seu primeiro valor.

C:\crp>spo <Return>

C:\crp>for /R %f in (*.bat) do (
set w=%~nxf
 echo spo2.bat
)

C:\crp>(
set w=a.bat
 echo spo2.bat
)
spo2.bat

C:\crp>(
set w=b.bat
 echo spo2.bat
)
spo2.bat

C:\crp>(
set w=spo.bat
 echo spo2.bat
)
spo2.bat

C:\crp>(
set w=spo2.bat
 echo spo2.bat
)
spo2.bat

C:\crp>

Você precisa adicionar setlocal .... e substitua% var% por! var! então você tem um comportamento normal!

@echo off
setlocal enableextensions enabledelayedexpansion
for /r %%f in (*.bat) do (
    set w=%%~nxf
    echo !w!
)


C:\crp>spo2
a.bat
b.bat
spo.bat
spo2.bat

C:\crp>
    
por 07.09.2013 / 12:38