Copier des fichiers avec des caractères génériques dans le chemin d'accès
supposons qu'il existe la structure du répertoire C:usersmyuserDesktopbobmarley.
dans windows, à partir du répertoire de départ C:usersmyuserDesktop je peux faire "cd bo*mar*" et cd dans le répertoire bobmarley. Cependant, je ne peux pas faire une " copie bo*mar* C:"
j'ai besoin d'utiliser la copie, xcopy, ou une commande standard de windows avec des caractères génériques dans le chemin pour copier les répertoires de correspondance vers la destination. Je ne sais pas s'il s'agit d'une limitation de copie et de xcopie ou si je ont la syntaxe de mal. J'ai aussi essayé "xcopy / E / i bo * mar** C:somedirectory".
5 réponses
Non-vous ne pouvez pas faire cela avec copie ou XCOPIE. Il y a un défaut fondamental avec ce que vous demandez.
et si vous avez aussi un répertoire nommé "boston\marathon"? Quel répertoire vous souhaitez copier à partir de?
vous pourriez répondre - "je veux les deux". Mais maintenant tu as un problème potentiel. Que faire si les deux répertoires sources contiennent un fichier nommé "test.txt". Vous ne pouvez avoir qu'un seul fichier nommé "test.txt" dans votre destination. Laquelle allez-vous garder? Il n'y a pas de bonne réponse, et c'est une bonne raison pour laquelle la commande est conçu pour interdire ce que vous tentez de faire.
Addendum
si vous êtes prêt à supposer qu'un seul dossier correspond au modèle, alors vous connaissez déjà toutes les étapes pour accomplir votre but avec ce qui suit.
@echo off
cd bo*\ma*
xcopy * c:\somedirectory
si vous voulez retourner là où vous avez commencé, utilisez PUSHD / POPD au lieu de CD
@echo off
pushd bo*\ma*
xcopy * c:\somedirectory
popd
mais, vous devriez être très prudent. Boston \ marathon il pourrait y en avoir, et ni PUSHD Ni CD ne donneront d'indication qu'il y a un problème potentiel.
RusF. Remarque:
en utilisant XCOPY, il n'est plus possible d'utiliser wildcarding nom de fichier pour les répertoires, et puis juste avoir un groupe de répertoires nommés copiés sur une archive ou une structure réseau.
(indice: vous voulez faire cela tout le temps, si vous gérez grosses liasses de données. Par exemple. Fichiers vidéo ou film (où de nombreux fichiers peut être associé à la production. Ou, histoire des prix des données fichiers, de différents formats, ou de fichiers de base de données divers projets de recherche ou travaux expérimentaux.)
je suis sûr que j'étais capable de faire ça avec une XCOPIE plus ancienne, mais avec les mises à jour (pour la sécurité), jokers dans le nom de fichier, faire pas de travail de droit (c'est à dire. vous pouvez construire une structure de répertoire, avec l'option "/t", mais vous ne pouvez pas obtenir les fichus fichiers les répertoires à migrer! Damned ennuyeux.)
Eh bien, nous ici à la ferme, toujours trouver une solution. Même si il faut à l'aide d'un .44 magnum ou un Styer 50. :)
alors, voilà ce que j'ai trouvé:
supposons que vous ayez un tas de répertoires appelés " Fark_1, Fark_2, Fark-Special, Fark_in_the_Park, Fark99... "et ainsi de suite.
Si tous ces "Fark..."les répertoires existent sur un disque C:\, et vous souhaitez migrer une copie de cette sous-structure de l'archive disque sur le réseau (disons qu'il est appelé: "h"), vous pouvez simplement procédez de la manière suivante:
Exécuter a pour DO à partir de la commande Windows (MS-DOS) invite:
c:\> XCOPY fark* h: /s /e /f /t
The /s /e are for copying subdirs
and empty directories, the /f says to
show the files, and the /t says to only
copy the disk directories. No XCOPY
option seems to exist anymore to copy the
disk structure AND the files in the
directories.
pour obtenir les fichiers à copier, vous faites alors ce qui suit:, aussi à partir de l'invite de commandes Windows:
FOR /d %a in (fark*) DO XCOPY "%a" h:%a\ /s /e /f /h /k /y
The /d says we are using directory names.
The %a is the variable name, substituted
into the command script for XCOPY. Make
sure to use whatever logical name or drive
letter you have for your archive structure.
(ie. don't use h: in the above command,
unless you have mapped h: to the place on
the network where you want to copy your
files to.) And note, the /y option means
overwrite any files already there.
Oui, c'est du vieux unix/dos, mais ça marche, et vous pouvez le mettre dans une fournée. Et vous pouvez éviter d'être la mouseboy pour faire le travail. (Pointer, cliquer, grogner, maudire. Répéter. Le processus canonique pour utiliser une interface graphique, c'est ça?) Maintenant, il y a beaucoup de manières de fantaisie pour ce faire. Et divers des utilités comme Robocopy, Xxcopie et ainsi de suite. Mais ce il obtient fait, et si vous avez une copie de Windows, vous avez probablement J'ai déjà la XCOPIE et des trucs à faire. Le meilleur de tous. Oh, si vous insérez les deux commandes dans un lot, alors vous ajuster la syntaxe de deux niveaux de commande substitution (je pense que c'est le terme exact).
exemple de lot:
REM --- copy the "fark*" files to the archive disk h:
@echo off
REM --- create/update the structure
xcopy fark* h: /s /e /f /t
REM --- copy over the fark* dirs, and all associated subdirs
for /d %%a in (fark*) do xcopy "%%a" "h:%%a\" /s /e /f /h /k /y
- Rus Future 18 avril 2012
dans le cas où vous souhaitez copier tous les fichiers de tous les répertoires qui correspondent. vous pouvez toujours faire quelque chose comme cela...
for /d %%d in (bo*) do (
for /d %%e in (ma*) do (
copy %%d\%%e\* c:\temp
mais soyez prudent pour le cas où les fichiers avec le même nom appera dans des répertoires différents.
voici mon script batch pour sauvegarder certains dossiers sur un lecteur et d'autres sur un autre en utilisant l'aide ci - dessus-fonctionne sur Win 7 great.
il n'est pas nécessaire de copier la structure du dossier si vous utilisez A pour boucle et /S va simplement copier ce qui a changé
juste une honte vous ne pouvez pas utiliser des expressions régulières ici-ou est-ce que quelqu'un a une solution plus nette ?
FOR /d %%a in (2010* 2011* 2012* 201301* 2013020* 2013021* 20130222* 20130224*) DO (
XCOPY "%%a" "Z:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)
FOR /d %%a in (20130225* 201303*) DO (
XCOPY "%%a" "X:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)
donc, si vous connaissez le nom du répertoire, Je ne sais pas pourquoi vous essayez d'utiliser des caractères génériques. J'ai eu un problème lorsque nous utilisons Mozilla Firefox et de nombreux sites Web que nous utilisons nécessitent une authentification par carte D'accès commune. Par défaut Mozilla Firefox n'est pas configuré pour utiliser un lecteur CAC. Alors j'ai configuré mon Firefox avec le lecteur CAC et j'ai pris le cert8.db et secmod.fichiers db de mon répertoire utilisateur C:\Users\%myname%\AppData\Roaming\Mozilla\Firefox\Profiles\???????.par défaut
Le le problème était de copier ces fichiers sur plusieurs ordinateurs et plusieurs répertoires d'Utilisateurs quand je ne sais pas qui est connecté sur quel ordinateur et le ???????.dossier par défaut est nommé quelque chose de différent pour chaque utilisateur.
j'ai créé un fichier texte appelé Computers.txt et entrer la liste de nos ordinateurs j'ai récupéré à partir de Active Directory et puis j'ai écrit le script suivant pour copier le .fichiers db qui ont le périphérique CAC que j'ai copié C:\Temp\Security
for /f %c in (C:\Temp\Computers.txt) do for /f %u in ('dir /B \%c\C$\Users\') do for /f %m in ('dir /B \%c\C$\Users\%u\AppData\Roaming\Mozilla\Firefox\Profiles\') do copy /Y C:\Temp\Security\*.db \%c\C$\Users\%u\AppData\Roaming\Mozilla\Firefox\Profiles\%m\*