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

21
demandé sur sashoalm 2011-12-22 23:52:35

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.

22
répondu dbenham 2011-12-22 20:40:53

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
5
répondu Rus Future 2012-04-18 20:25:13

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.

4
répondu PA. 2011-12-22 22:40:19

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"
)
1
répondu Colin Hay 2013-03-22 07:47:05

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\*
0
répondu SDey 2017-10-27 16:16:20