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:
Para que serve o parâmetro /y? Não consegui encontrar nada pesquisando no Google.
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 %x
Este 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 DO
ação ou é ren
para renomear.
Isso /y
impede 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.