Script de lot simple pour copier le fichier dans des emplacements basés sur le nom d'utilisateur

0

Je me demandais si quelqu'un pouvait aider avec ce script, j'ai essayé de remplacer la ligne xcopy par

echo %frompath%

et ça ne fait rien, c'est comme si la portée n'était pas correcte, mais je ne suis pas sûr, principalement de PHP, où vous seriez en mesure de définir une variable globale en dehors de la boucle.

Toute aide sera fortement appréciée.

Cordialement, Lewis

@echo OFF
SETLOCAL enabledelayedexpansion

SET frompath = "C:\from\"
SET preusername = "C:\to\"
SET postusername = "\folder\"

for /f "tokens=* skip=1" %%a in ('wmic UserAccount get Name') do (
    if not "%%a"="" (
        xcopy %frompath% %preusername%%%a%postusername%
    )
)

echo "Complete"
pause
Lewis Stevens
la source

Réponses:

0
  • Tu ne cites pas de sentiers,
  • la faille wmic pour produire des fins de ligne doublées et
  • le fait que les noms d'utilisateur soient remplis d'espaces sont les problèmes que vous rencontrez.
  • Votre mauvaise utilisation de la commande set déjà mentionnée par JohnnyVegas

Voir cet exemple de sortie hexadécimale de la commande wmic pour le prouver:

> wmic UserAccount get Name|hex.exe
HEX:       +00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  0123456789abcdef
0000000000: 4E 61 6D 65 20 20 20 20  20 20 20 20 20 20 20 20  Name
0000000010: 20 20 20 20 0D 0D 0A 41  64 6D 69 6E 69 73 74 72      ...Administr
0000000020: 61 74 6F 72 20 20 20 20  20 20 20 0D 0D 0A 44 65  ator       ...De
0000000030: 66 61 75 6C 74 41 63 63  6F 75 6E 74 20 20 20 20  faultAccount
0000000040: 20 20 0D 0D 0A 47 61 73  74 20 20 20 20 20 20 20    ...Gast
0000000050: 20 20 20 20 20 20 20 20  20 0D 0D 0A 48 6F 6D 65           ...Home
0000000060: 47 72 6F 75 70 55 73 65  72 24 20 20 20 20 20 20  GroupUser$

Pour résoudre le doublé, 0x0Dvous avez besoin d'un autre.
Le lot suivant renvoie uniquement la commande xcopy. Si la sortie est OK, supprimez l'écho.

@echo OFF
SETLOCAL enabledelayedexpansion

SET "frompath=C:\from\"
SET "preusername=C:\to\"
SET "postusername=\folder\"

for /f "skip=1" %%a in ('wmic UserAccount get Name^|findstr "^[a-z]"') do (
    for %%b in (%%~a) do Echo=xcopy "%frompath%" "%preusername%%%a%postusername%"
)

echo "Complete"
pause
Lotings
la source
0

Utilisez-vous une invite de commande administrative?

N'utilisez pas d'espaces entre '=', remplacez le script par set frompath="c:\from\"- Vous souhaiterez ajouter le commutateur / s à la ligne xcopy pour inclure les sous-répertoires.

JohnnyVegas
la source