Parâmetro desconhecido no comando ren no arquivo em lote

Parâmetro desconhecido no comando ren no arquivo em lote

Sou novo na programação de arquivos em lote e estou analisando um arquivo em lote existente, que foi implementado por um ex-desenvolvedor de 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 percorrer recursivamente o caminho fornecido. Mas há algumas partes que são desconhecidas para mim:

  1. Para que serve o parâmetro /y? Não consegui encontrar nada pesquisando no Google.

  2. O que exatamente esse comando está fazendo?

ATUALIZAR: Obrigado pela resposta. Muitos disseram que este comando moveria arquivos que correspondessem ao padrão para a subpasta de erro. Então tentei testá-lo em minha máquina local. Criei o seguinte diretório:

C:
├──test
│   └──error

E inseri um arquivo 38316468.sql na pasta de teste.
Então 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 nenhuma mensagem de erro. Sem erros de sintaxe. Mas não faz nada. Não move o arquivo, não renomeia o arquivo. Por que isso é assim?

Responder1

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 aqui).
MOVE tem "/y", que significa 'não me incomode com perguntas "tem certeza" quando o alvo já existe e presuma que respondi "Sim"' e está tudo bem com uma pasta como segundo parâmetro.
Mas no caso de MOVE o /Y deve aparecer logo 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 (procurará nos subdiretórios) que correspondem ao padrão38316468e depois liga para a REN para cada partida. O REN (deveria ser MOVE) tenta renomear (mover) cada arquivo para a pasta de erro.
Mas o uso de /Y ainda está errado para 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 si. (Por exemplo, de uma pasta de erros para uma pasta de erros.) Isso pode ou não ser um problema, dependendo se a pasta de erros for limpa posteriormente, antes que o comando FOR seja usado novamente.

Por último, mas não menos importante: Algumas palavras de cautela:
O uso das variáveis ​​%X em um arquivo em lote requer a duplicação de % para %%X. Na linha de comando você pode usar um único%. E as variáveis ​​%X diferenciam maiúsculas de minúsculas, portanto %X e %x não são a mesma coisa.

Responder2

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

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

No seu comando, a DOação ou é renpara renomear.

Isso /yimpede que o prompt de comando solicite a substituição de arquivos da origem que já existem no destino.

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

informação relacionada