command-line - subfolders - xcopy verbose




xcopy file, rename, suprime a mensagem “O xxx especifica um nome de arquivo…” (13)

Isso parece muito simples e talvez eu esteja apenas ignorando o sinalizador apropriado , mas como eu, em um comando, copiava um arquivo de um diretório para outro e o renomeia no diretório de destino? Aqui está o meu comando:

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

Isso me pede sempre o seguinte:

O TestConnectionExternal \ bin \ Debug \ whee.config especifica um nome de arquivo ou nome de diretório no destino (F = file, D = directory)?

Eu quero suprimir esse prompt; a resposta é sempre F


A coisa certa a fazer se você quer copiar apenas o arquivo e alterar seu nome no destino é:

xcopy / f / y "bin \ desenvolvimento \ exemplo.exe" "TestConnectionExternal \ bin \ Debug \ NewName.exe *"

E vai funcionar bem


Basta acessar http://technet.microsoft.com/en-us/library/bb491035.aspx

Aqui está o que o PROBLEMA PRINCIPAL é "... Se o destino não contém um diretório existente e não termina com uma barra invertida (), a seguinte mensagem aparece: ...

O destino especifica um nome de arquivo ou nome de diretório no destino (F = file, D = directory)?

Você pode suprimir essa mensagem usando a opção de linha de comando / i, que faz com que o xcopy assuma que o destino é um diretório se a origem for mais de um arquivo ou diretório.

Demorou um pouco, mas tudo o que precisamos é de RTFM.


Então, há uma correção simples para isso. É reconhecidamente estranho, mas funciona. O xcopy não perguntará se o destino é um diretório ou arquivo se o novo arquivo (filename) já existir. Se você preceder seu comando xcopy com um eco simples para o novo nome de arquivo, ele sobrescreverá o arquivo vazio. Exemplo

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y

Eu sugiro robocopy vez de copy ou xcopy . Usado como comando ou na GUI em clientes ou servidores. Tolerante a pausas de rede e você pode optar por ignorar atributos de arquivo ao copiar os atributos copiar por arquivo. Ah, e ele suporta máquinas multi-core, então os arquivos são copiados muito mais rapidamente em "paralelo" uns com os outros em vez de sequencialmente. robocopy pode ser encontrado no MS TechNet.


Existe algum tipo de recurso não documentado no XCOPY. você pode usar:

xcopy "bin \ desenvolvimento \ whee.config.exemplo" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config *"

Eu testei apenas hoje. :-)


Isto é da resposta das contas.

Apenas para ser realmente claro para os outros.

Se você estiver copiando UM arquivo de um lugar para outro E você quiser que toda a estrutura de diretórios seja criada, use o seguinte comando:

xcopy "C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg" "C:\Target Data\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" 

Sim, coloque uma barra invertida no final do nome do arquivo e ele NÃO perguntará se é um arquivo ou diretório. Como existe apenas UM arquivo na origem, ele assumirá que é um arquivo.


O xcopy permitirá que você copie um único arquivo em uma pasta especificada, mas não permitirá que você defina um nome de destino. Se você precisar do nome do destino, basta renomeá-lo antes de copiá-lo.

ren "bin \ desenvolvimento \ whee.config.exemplo" whee.config

xcopy / R / Y "bin \ desenvolvimento \ whee.config" "TestConnectionExternal \ bin \ Debug \"


Outra opção é usar um curinga de destino. Note que isso só funciona se os nomes dos arquivos de origem e destino forem os mesmos, então, embora isso não resolva o exemplo específico do OP, achei que valeu a pena compartilhá-lo.

Por exemplo:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

criará uma cópia do arquivo "whee.config.example" no diretório de destino sem solicitar o arquivo ou diretório.

Atualização : Como mencionado por @chapluck:

Você pode alterar "* " para "[newFileName].*" . Ele persiste a extensão do arquivo, mas permite renomear. Ou mais hacky: "[newFileName].[newExt]*" para alterar a extensão


Trabalhe ao redor, use ReName ... e nomeie-o com algum nome criptográfico e, em seguida, nomeie-o com seu nome apropriado

C:

CD "C: \ Users \ Public \ Documents \ Meus Sites \ AngelFire ~ Zoe \"

XCopy / D / I / V / Y "C: \ Usuários \ Public \ Documents \ Meus Sites \ HostGator ~ ZoeBeans \ cop.htm"

Ren "cop.htm" "christ-nosso-passover.htm"


Use copy em vez de xcopy ao copiar arquivos.

Por exemplo, copie "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config"


Voltar para a pergunta original:

 xcopy "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"

poderia ser feito com dois comandos, por exemplo:

mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

Simplesmente anexando "\ .." ao caminho do arquivo de destino, o diretório de destino é criado, se ainda não existir. Nesse caso

"c:\mybackup\TestConnectionExternal\bin\Debug\"

que é o diretório pai do diretório não existente

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."

Pelo menos para o WIN7 mkdir não se importa se o diretório

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

existe realmente.


XCOPY com * no final do destino para copiar arquivos existentes ou não no destino XCOPY com \ no final do destino para copiar pastas e conteúdos existentes ou não no destino

alternativamente

RoboForm SOURCE DEST FILE para arquivos RoboForm SOURCE DEST para pastas


xcopy src dest /I

REM This assumes dest is a folder and will create it, if it doesnt exists