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
la source
/-i
pour supprimer cette question stupide.Un truc apparemment non documenté est de mettre un
*
à la fin de la destination - alors xcopy sera copié en tant que fichier, doncxcopy 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.la source
echo f
au 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écessaireCe fil de discussion sur Stackoverflow n'a pas de réponse marquée, mais il peut vous aider (semble être la même question).
la source
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.
la source
Une autre astuce possible est la pré-création d’un fichier ou d’un dossier cible. Alors
xcopy
ne 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.
La commande originale (une ligne d’un fichier de script .cmd légèrement plus long) était
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 F
et 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
xcopy
commande.Pour fichier, ce serait, par exemple:
Malheureusement, Windows par défaut n’a pas de
touch
commande, ce qui est très utile pour créer un fichier factice de 0 octet.Pour le dossier, ce serait, par exemple:
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
xcopy
ne 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:
Pour les fichiers:
Cette dernière commande a DEUX redirections de sortie entre -
echo.
> ... |xcopy
. Mais au moins dans les.cmd
fichiers de Windows 8.1 cela fonctionne.la source