xcopy n'exprimant pas la requête fichier / répertoire

2

J'essaie d'utiliser xcopy pour copier un fichier d'une machine à une autre sur notre réseau dans le cadre d'un programme Java. J'appelle xcopy comme ceci:

xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i

Comme je l’appelle de Java, j’ai besoin de supprimer toutes les invites. Pour la plupart, \ i et \ y ont fait exactement cela. Cependant, pour ce fichier / i échoue et je reçois l’invite de fichier ou de répertoire Le résultat est qu'il bloque tout le programme.

J'ai également essayé de l'appeler avec / s / t / q ajouté aux options existantes, en vain. Pourquoi / i ne cherche-t-il pas à supprimer l'invite Fichier ou Répertoire? Dois-je appeler les options dans un ordre? Y a-t-il autre chose que je dois faire?

EDIT: Je devrais mentionner, le fichier est un fichier texte - une seule ligne de texte. Il n'a pas de prolongement. Cela ressemble à ceci: FILE-NAME

Daniel Bingham
la source

Réponses:

7

echo F fait le tour:

echo F | xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i

Notez que le caractère peut différer selon les versions localisées (mon allemand attend D pour fichier (Datei) ou V pour répertoire (Verzeichnis))

Marc Wittke
la source
pas de localisation, c'est toujours la même lettre dans Win 8 rus. Cependant, c'est agaçant. Je préférerais que xcopy soit utilisé /-ipour supprimer cette question stupide.
Arioch 'Le
6

Un truc apparemment non documenté est de mettre un *à la fin de la destination - alors xcopy sera copié en tant que fichier, donc

xcopy c:\source\file.txt c:\destination\newfile.txt*

L' echo f | xcopy ...astuce ne fonctionne pas sur les versions localisées de Windows, où l'invite est différente.

Govert
la source
echo fau moins fonctionne sur Russian Win 8.1 // PS. L'astérisque fonctionne, je ne peux que me demander qui pourrait le découvrir! Je parie que c'est un bogue dans xcopy qui est [ab] utilisé pour compenser l'absence de fonctionnalité nécessaire
Arioch 'Le
1

Ce fil de discussion sur Stackoverflow n'a pas de réponse marquée, mais il peut vous aider (semble être la même question).

Milde
la source
Merci pour la suggestion, mais c'est un scénario assez différent. Cela supprime le terminal lui-même lors de l'appel d'un fichier de commandes. J'essaie de supprimer une invite fournie par xcopy.
Daniel Bingham
0

J'ai toujours trouvé un tricheur utile pour ces situations: avoir un fichier texte avec un Y et marquer <y.txt à la fin de xcopy.

Col
la source
0

Une autre astuce possible est la pré-création d’un fichier ou d’un dossier cible. Alors xcopyne demanderais pas, car il serait déjà au courant. Je ne dirais pas que cette solution est meilleure que celles mentionnées ci-dessus, elle est simplement différente et par conséquent, je souhaite qu'elle soit ici aussi.

Ma tâche simple consistait à copier un certain nombre de fichiers d'un dossier réseau dans un dossier d'accumulation local.

  • AAAAA \ Disk1.zip => AAAAA.zip
  • BBBBB \ Disk1.zip => BBBBB.zip
  • etc

La commande originale (une ligne d’un fichier de script .cmd légèrement plus long) était

for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip

Cela génère toutefois beaucoup de questions de répertoire (F) ile ou (D) lors d’une première utilisation avec de nouveaux fichiers (non encore remplies). Surtout si je renseigne un nouveau dossier cible vide.

Puis le echo Fet Asterisk Hack répondent - ils fonctionnent bien aussi.

  • for /d /r %SRC% %%1 in (*.*) do echo f | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
  • for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip*

Maintenant, encore une solution potentielle serait explicitement de CRÉER le dossier cible du fichier juste avant d’exécuter la xcopycommande.

Pour fichier, ce serait, par exemple:

echo. > C:\Temp\TargetPlace
xcopy Source C:\Temp\TargetPlace

Malheureusement, Windows par défaut n’a pas de touchcommande, ce qui est très utile pour créer un fichier factice de 0 octet.

Pour le dossier, ce serait, par exemple:

mkdir C:\Temp\TargetPlace
xcopy Source C:\Temp\TargetPlace

Certes, il faut deux commandes - deux lignes - en script shell CMD. Vous ne pouvez pas mettre plusieurs commandes dans CMD boucle facilement, mais là , vous pouvez tuyau les commandes ensemble ( à condition que xcopyne lirait pas réellement une entrée de l' utilisateur lors de son émission la commande spécifique, ce qui pourrait changer par exemple dans les futures versions de fenêtres, mais peu probable).

Pour les dossiers:

for /d /r %SRC% %%1 in (*.*) do md %~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip

Pour les fichiers:

for /d /r %SRC% %%1 in (*.*) do echo. >%~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip

Cette dernière commande a DEUX redirections de sortie entre - echo.> ... | xcopy. Mais au moins dans les .cmdfichiers de Windows 8.1 cela fonctionne.

Arioch 'Le
la source