Cela semble assez simple et peut-être que je ne fais que négliger drapeau approprié , mais comment pourrais-je, dans une commande, copier un fichier d'un répertoire à un autre et le renommer dans le répertoire de destination? Voici ma commande:
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"
Cela m'invite à chaque fois à:
TestConnectionExternal\bin\Debug\whee.config spécifie-t-il un nom de fichier ou un nom de répertoire sur la cible (F = fichier, D = répertoire)?
Je veux supprimer cette invite; la réponse est toujours F
.
N'utilisez pas le xcopy
, utilisez copy
, il n'a pas ce problème.
xcopy
est généralement utilisé pour effectuer des copies récursives de plusieurs fichiers/dossiers ou lorsque vous avez besoin des fonctionnalités de vérification/invite qu'elle offre. Pour les copies de fichiers uniques, la commande copy
fonctionne parfaitement.
J'utilise
echo f | xcopy /f /y srcfile destfile
pour le contourner.
Une autre option consiste à utiliser un caractère générique de destination. Notez que cela ne fonctionne que si les noms de fichiers source et de destination sont identiques. Ainsi, bien que cela ne résolve pas l'exemple spécifique du PO, j'ai pensé qu'il valait la peine de le partager.
Par exemple:
xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*"
créera une copie du fichier "whee.config.example" dans le répertoire de destination sans demander de fichier ni de répertoire.
Mise à jour: Comme mentionné par @chapluck:
Vous pouvez changer "* "
en "[newFileName].*"
. Il persiste extension de fichier mais permet de renommer. Ou plus de hacky: "[newFileName].[newExt]*"
pour changer l'extension
Il existe une sorte de fonctionnalité non documentée dans XCOPY. vous pouvez utiliser:
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config *"
je l'ai testé juste aujourd'hui. :-)
Allez simplement à http://technet.Microsoft.com/en-us/library/bb491035.aspx
Voici ce que le problème principal est "... Si Destination ne contient pas de répertoire existant et que ne se termine pas par une barre oblique inverse (), le message suivant apparaît. : ...
La destination spécifie-t-elle un nom de fichier ou un nom de répertoire sur la cible (F = fichier, D = répertoire)?
Vous pouvez supprimer ce message à l'aide de l'option de ligne de commande/i, qui permet à xcopy de supposer que la destination est un répertoire si la source est composée de plusieurs fichiers ou d'un répertoire.
Cela m'a pris du temps, mais tout ce qu'il faut, c'est RTFM.
Donc, il existe une solution simple pour cela. C'est certes maladroit, mais ça marche. xcopy ne demandera pas si la destination est un répertoire ou un fichier SI le nouveau fichier (nom de fichier) existe déjà. Si vous faites précéder votre commande xcopy d'un simple écho vers le nouveau nom de fichier, le fichier vide sera écrasé. Exemple
echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y
Ceci est de Bills answer.
Juste pour être vraiment clair pour les autres.
Si vous copiez ONE fichier d'un endroit à un autre ET vous voulez que la structure de répertoires complète soit créée, utilisez la commande suivante:
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\"
Oui, mettez une barre oblique inverse à la fin du nom du fichier et il ne vous demandera PAS s'il s'agit d'un fichier ou d'un répertoire. Comme il n'y a qu'un seul fichier dans le code source, il sera considéré comme un fichier.
XCOPY avec * à la fin de la cible pour copier des fichiers, qu'ils existent ou non dans la destination XCOPY avec\à la fin de la cible pour copier des dossiers et du contenu, existants ou non, dans la destination
Alternativement
RoboForm SOURCE DEST FILE pour les fichiers RoboForm SOURCE DEST pour les dossiers
xcopy src dest /I
REM This assumes dest is a folder and will create it, if it doesnt exists
Retour à la question initiale:
xcopy "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"
pourrait être fait avec deux commandes, par exemple:
mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"
En ajoutant simplement "\ .." au chemin du fichier de destination, le répertoire de destination est créé s'il n'existe pas déjà. Dans ce cas
"c:\mybackup\TestConnectionExternal\bin\Debug\"
qui est le répertoire parent du répertoire non existant
"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
Au moins pour WIN7 mkdir ne se soucie pas de savoir si le répertoire
"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"
existe vraiment.
J'ai eu un problème similaire et robocopy et xcopy n'ont pas aidé, car je voulais supprimer les commentaires et utiliser un nom de fichier de destination différent. j'ai trouvé
type filename.txt > destfolder\destfilename.txt
travailler selon mes exigences.
Pour dupliquer des fichiers volumineux, xopy avec/J switch est un bon choix. Dans ce cas, dirigez simplement un F pour un fichier ou un D pour un répertoire. En outre, vous pouvez enregistrer des travaux dans un tableau pour des références futures. Par exemple:
$MyScriptBlock = {
Param ($SOURCE, $DESTINATION)
'F' | XCOPY $SOURCE $DESTINATION /J/Y
#DESTINATION IS FILE, COPY WITHOUT Prompt IN DIRECT BUFFER MODE
}
JOBS +=START-JOB -SCRIPTBLOCK $MyScriptBlock -ARGUMENTLIST $SOURCE,$DESTIBNATION
$JOBS | WAIT-JOB | REMOVE-JOB
Merci à Chand avec quelques modifications: https://stackoverflow.com/users/3705330/chand
Je suggère robocopy
au lieu de copy
ou xcopy
. Utilisé comme commande ou dans l'interface graphique sur les clients ou les serveurs. Tolérant des pauses réseau et vous pouvez choisir d’ignorer les attributs de fichier lors de la copie des attributs de copie par fichier. Oh, et il prend en charge les machines multi-core afin que les fichiers soient copiés beaucoup plus rapidement en parallèle les uns avec les autres plutôt que séquentiellement. robocopy
est disponible sur MS TechNet.
La bonne chose à faire si vous voulez copier simplement le fichier et changer son nom à la destination est:
xcopy/f/y "bin\development\example.exe" "TestConnectionExternal\bin\Debug\NewName.exe *"
Et ça va bien marcher
xcopy vous permettra de copier un seul fichier dans un dossier spécifique mais ne vous permettra pas de définir un nom de destination. Si vous avez besoin du nom de la destination, renommez-le simplement avant de le copier.
ren "bin\development\whee.config.example" whee.config
xcopy/R/Y "bin\développement\whee.config" "TestConnectionExternal\bin\Debug \"
Utilisez copy au lieu de xcopy lors de la copie de fichiers.
par exemple. copier "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"
Étant donné que vous ne modifiez pas réellement le nom du fichier, vous pouvez retirer le nom du fichier de la destination et il n'y aura pas de questions.
xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\ /Y
Cette approche fonctionne bien lorsqu'il est garanti que le répertoire de destination existe et que la source peut également être un fichier ou un répertoire.
Contournez-vous, utilisez ReName ... et nommez-le un nom cryptique, puis renommez-le à son nom propre
C:
CD "C:\Utilisateurs\Public\Documents\Mes sites Web\AngelFire ~ Zoe \"
XCopy/D/I/V/Y "C:\Utilisateurs\Public\Documents\Mes sites Web\HostGator ~ ZoeBeans\cop.htm"
Ren "cop.htm" "christ-our-passover.htm"