web-dev-qa-db-fra.com

Fichier xcopy, renommer, supprimer le message "Est-ce que xxx spécifie un nom de fichier ..."

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.

383
Sarah Vessels

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.

208
LBushkin

J'utilise

echo f | xcopy /f /y srcfile destfile

pour le contourner.

617
Arnshea

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

167
zippycoder

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. :-)

88
ienaxxx

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.

71
Bill

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
27
DaveD

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.

6
adudley

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

2
Colin Hay

xcopy src dest /I

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

2
jerryh91

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.

2
grenix

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.

2
user140185

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

1
MAZDA

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.

1
surferdj

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

1
Thanos

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 \"

0
Chuck Emanuel

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"

0
Peter

É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.

0
simmo

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"

0
JollyChollie