Como você copia arquivos usando uma linha de comando quando o arquivo tem quatro ou menos caracteres no nome do arquivo?

Como você copia arquivos usando uma linha de comando quando o arquivo tem quatro ou menos caracteres no nome do arquivo?

tentando copiar arquivos com quatro ou menos caracteres no nome do arquivo com uma determinada extensão para uma nova pasta. Tentei fazer isso por várias horas! ficando frustrado. Usei o comando copy e o curinga ? e *

Responder1

Como AFH apontou nos comentários, um simples "COPY ????.ext" funcionará em nomes de arquivo de quatroou menoscaracteres. Na correspondência de padrões no estilo glob em sistemas baseados em DOS, * significa "0 ou mais caracteres" e aparentemente ? significa zero ou um caractere. No entanto, certifique-se de entender que esse tipo de correspondência de padrões é feito no nível do aplicativo - ou seja, no Windows (e no DOS, nesse caso), passe a linha de comando exatamente como digitada para o programa ser executado. Se você digitar "????.ext", é exatamente isso que o comando COPY vê.

Compare isso com outros shells com os quais trabalhei, como em un*x (bash, tcsh, etc), onde o interpretador de comandos primeiro expande todas as correspondências de padrões e passa a lista completa de arquivos para o comando. Ou seja, nesses shells, se você digitar "copiar arquivo.?", o shell chamará "copiar arquivo.1 arquivo.2 arquivo.3", "copiar" normalmente nunca verá o literal "arquivo.?" argumento.

(E é por isso que minha primeira resposta original estava incorreta - testei-a com um comando que foinãoexpandindo a forma como o CMD.EXE do Windows teria feito. Apenas algo para estar ciente!)

Não há nenhuma maneira no console/linha de comando normal do Windows (que énãoDOS, aliás!) fazer isso com um único comando por causa do jeito ? e * funciona no Windows: ? corresponde a um único caractere e * corresponde ao maior número possível. Nem permite que você especifique uma contagem. Mas usando um arquivo em lote para executar cada comando em sequência, você pode obter o mesmo efeito:

@echo off
copy "????.ext" "target folder"
copy "???.ext" "target folder"
copy "??.ext" "target folder"
copy "?.ext" "target folder"

Usando várias técnicas de arquivo em lote, você também pode modificá-lo para funcionar com outros comprimentos de nome de arquivo ou usar pastas de destino diferentes, etc.

Além disso, com sistemas operacionais Windows modernos, você provavelmente terá o VBScript disponível por meio do Windows Script Host e, com o Win8, deverá ter o PowerShell, ambos permitindo uma lógica de programação muito mais extensa, como expressões regulares poderosas e assim por diante.

informação relacionada