Parâmetro desconhecido no comando ren no arquivo de lote

1

Sou novo na programação de arquivos em lote e estou analisando um arquivo de lote existente, que foi implementado por um desenvolvedor anterior em nossa empresa. Então estou tentando descobrir o que ele pretendia fazer. Eu tenho o seguinte comando:

for /r %x in (\Server6\doc_production\*38316468*) do ren "%x" /y \Server6\doc_production\error\

Eu sei que este é um comando de loop que deve ir recursivamente através do caminho fornecido. Mas há algumas partes que são desconhecidas para mim:

  1. Qual é o parâmetro / y para? Eu não consegui encontrar nada pesquisando.

  2. O que exatamente esse comando está fazendo?

UPDATE : Obrigado pela resposta. Muitos disseram que esse comando moveria arquivos que correspondem ao padrão para a subpasta de erro. Então eu tentei testá-lo na minha máquina local. Eu criei o seguinte diretório:

C:
├──test
│   └──error

E eu inseri um arquivo 38316468.sql na pasta de teste.
Então eu executei o comando:

for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\

Mas nada acontece. O comando é executado sem qualquer mensagem de erro. Não há erros de sintaxe. Mas isso não faz nada. Não move o arquivo, não renomeia o arquivo. Por que isso é assim?

    
por Mo Prog 06.08.2018 / 16:18

2 respostas

2

Isso não parece válido para mim.
RENAME (REN) não possui um parâmetro / y e requer que o segundo parâmetro seja um nome de arquivo (não uma pasta como esta). MOVE tem "/ y", significando "não me incomode com" você tem certeza "perguntas quando o alvo já existe e suponho que eu respondi" Sim "'e está OK com uma pasta como 2º parâmetro.
Mas no caso de MOVE, o / Y deve aparecer diretamente após o comando MOVE e antes dos parâmetros. Se você substituir REN por MOVE, ainda será um erro de sintaxe.

De qualquer forma: O comando FOR cria uma lista de todos os arquivos (irá procurar por sub-dirs) que correspondem ao padrão 38316468 e depois chama o REN para cada partida. O REN (deve ser MOVE) tenta renomear (mover) cada arquivo para a pasta de erros.
Mas o uso de / Y ainda está errado para o MOVE.

Outro problema desse erro é uma subpasta da pasta de origem na qual o FOR está operando. Isso fará com que o comando tente mover os arquivos para eles mesmos. (Por exemplo, da pasta de erro para a pasta de erros.) Isso pode ou não ser um problema, dependendo se a pasta de erros é removida mais tarde antes que o comando FOR seja usado novamente.

Por último, mas não menos importante: algumas palavras de cautela:
Usar as variáveis% X em um arquivo em lote requer o dobro do% para %% X. Na linha de comando, você pode usar um único%. E% X variáveis diferenciam maiúsculas de minúsculas, então% X e% x não são a mesma coisa.

    
por 06.08.2018 / 16:47
1

Vamos dissecá-lo para que você possa aprender o que está fazendo.

for /r %x Este comando percorre a árvore de pastas a partir de \Server6\doc_production\*38316468* caminho e executa a instrução DO em cada arquivo correspondente.

Em seu comando, DO ou ação é ren para renomear.

O /y impede que o prompt de comando avise sobre a substituição de arquivos da origem que já existe no destino.

Parece que ele está procurando por um número curinga no primeiro diretório e irá renomeá-lo e filmá-lo para / error / folder, mas não há um nome de arquivo para realmente fazê-lo funcionar. Um nome de arquivo após a pasta / error / precisar ser especificada para que este comando funcione corretamente.

    
por 06.08.2018 / 16:45