File batch per copiare file da una cartella a un'altra cartella


235

Ho una cartella di archiviazione su una rete in cui tutti gli utenti memorizzeranno i loro dati attivi su un server. Ora quel server verrà sostituito da uno nuovo a causa di problemi di posizione, quindi ho bisogno di copiare i file delle sottocartelle dalla vecchia cartella di archiviazione del server alla nuova cartella di archiviazione del server. Ho sotto ex:

da \ Oldeserver \ storage \ data & files a \ New server \ storage \ data & files.


3
Presumo che tu stia parlando di un ambiente Windows?
Alan Plum,


4
@ HugoM.Zuleta, sono a conoscenza dei file .bat. Ma "file batch" non garantisce necessariamente un ambiente Windows. L'uso del termine precede Windows (così come i file .bat) e ho persino visto i principianti usare il termine per indicare "script di shell" in ambienti * nix.
Alan Plum,

1
@pluma Sono d'accordo, e questo principalmente perché fanno riferimento a operazioni batch eseguite dagli strumenti di scripting del loro sistema operativo.
Hugo M. Zuleta,

Risposte:


441

xcopy.exe è sicuramente il tuo amico qui. È integrato in Windows, quindi il suo costo è nulla.

Appena xcopy /s c:\source d:\target

Probabilmente vorresti modificare alcune cose; alcune delle opzioni che aggiungiamo includono anche queste:

  • /s/e - copia ricorsiva, inclusa la copia di directory vuote.
  • /v- aggiungi questo per verificare la copia rispetto all'originale. più lento, ma per il paranoico.
  • /h - copia sistema e file nascosti.
  • /k- copia gli attributi di sola lettura insieme ai file. in caso contrario, tutti i file diventano lettura-scrittura.
  • /x- se ti interessano le autorizzazioni, potresti desiderare /oo /x.
  • /y - non richiedere prima di sovrascrivere i file esistenti.
  • /z- se ritieni che la copia potrebbe non riuscire e desideri riavviarla, utilizza questa opzione. Posiziona un marcatore su ciascun file durante la copia, in modo da poter eseguire nuovamente il comando xcopy per riprendere da dove era stato interrotto.

Se ritieni che la xcopy potrebbe non riuscire a metà (come quando stai copiando su una connessione di rete instabile) o che devi interromperla e vuoi continuare in un secondo momento, puoi usarla xcopy /s/z c:\source d:\target.

Spero che questo ti aiuti.


2
@Iavinio Chiede file o directory quando si copia un archivio. C'è un modo per sopprimerlo?
Bitterblue,

Ciao @ mini-me - Ho scoperto che se si tratta di una directory, puoi specificare un carattere '/' finale e non vedrai quel messaggio.
DaveDev,

2
/i- Se la destinazione non esiste e la copia di più di un file, presuppone che la destinazione debba essere una directory.
Lavinio

1
Come copiare un singolo file dalla directory?
Charan Raju CR

10
Per aggirare il prompt "file o directory", eseguire il comando in questo modo ... echo f | xcopy /s /f srcfile destfile
wintondeshong

56

Il mio preferito per il backup dei dati è:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir è per mirror. Puoi anche usare / mov per spostare i file. Riproduce esattamente la stessa cartella. Può eliminare / sovrascrivere i file secondo necessità. Funziona benissimo per me.È più veloce di xcopy / copy. È integrato anche in Windows.

Fonte: http://technet.microsoft.com/en-us/library/cc733145.aspx


2
Sostengo questo. È veramente veloce. molto più veloce di xcopy
Ike

C'è un modo per rimuovere ricorsivamente thumbs.db simile a questo?
drooh,

54

Giusto per essere chiari, quando lo usi xcopy /s c:\source d:\target , metti "" attorno alla destinazione c: \ source e d: \, altrimenti otterrai un errore.

cioè se ci sono spazi nel percorso cioè se hai:

"C:\Some Folder\*.txt"

ma non richiesto se hai:

C:\SomeFolder\*.txt

1
Le virgolette hanno reso il trucco;) grazie ho anche usato / Y per sostituire il file se esiste :) Esempio: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro,

18

Potresti dare un'occhiata a XCopy o RoboCopy, che sono soluzioni abbastanza complete per quasi tutte le operazioni di copia di file su Windows.


3
RoboCopy sembra essere migliore di XCopy perché xcopy richiede decisioni su file o cartelle. E non posso rifiutarlo. DEVE essere in grado di funzionare in modo completamente automatico.
Bitterblue,

@ mini-me So che è molto tardi, ma non riesco a trovare lo stesso interruttore rilevante. Ho finito col ricorrere a farlo creare un file vuoto con lo stesso nome in cui sto copiando e quindi sovrascriverlo. Se il file esiste già, non si preoccupa di chiedere se si tratta di un file o di una directory. (Se si desidera la directory automatica, è possibile aggiungere un '/' al percorso e lo farà). Spero che questo aiuti le persone future!
Tom C

2
@Eve Per riferimento, echo f | xcopy source destination /ylo renderà automatico. Assegna a tutte le domande una "f" come risposta. Passerà anche le richieste di sovrascrittura (f è considerato sì, penso).
ndm13

14

Per bypassare "specificare un nome file o nome directory sulla destinazione (F = file, D = directory)?" prompt con xcopy, è possibile effettuare le seguenti operazioni ...

echo f | xcopy /f /y srcfile destfile

o per quelli di noi che copiano solo grandi sottostrutture / cartelle:

use / i che specifica la destinazione deve essere una directory se si copia più di un file


(echo "f" per i file o "D" per le directory)
JinSnow il

provando a farlo ora e non funziona - ricevo sempre suggerimenti quando provo a copiare un file in un'altra directory. Usando Win 10 se questo lo influenza affatto echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". L'ho provato con una combinazione di altri switch inutilmente (e maiuscola F)
Prof

3

se si desidera copiare il file non utilizzando il percorso assoluto, percorso relativo in altre parole:

non dimenticare di scrivere una barra rovesciata nel percorso E NON una barra

esempio :

    copy children-folder\file.something .\other-children-folder

PS: il percorso assoluto può essere recuperato utilizzando questi caratteri jolly chiamati "parametri batch"

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

consultare la documentazione qui sulla copia: https://technet.microsoft.com/en-us/library/bb490886.aspx

e anche qui per la documentazione dei parametri batch: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


Penso che \ si chiama barra rovesciata.
Leon Bohmann,

2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

0

Guarda lo rsyncstrumento basato su Windows NASBackup . Sarà un vantaggio se si conoscono i comandi rsync.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.