Einfaches Stapelskript zum Kopieren von Dateien an Speicherorte basierend auf dem Benutzernamen

0

Ich habe mich gefragt, ob jemand mit diesem Skript helfen kann. Ich habe versucht, die xcopy-Zeile durch zu ersetzen

echo %frompath%

und es gibt einfach nichts wieder, es ist, als ob der Gültigkeitsbereich nicht korrekt wäre, aber ich bin mir nicht sicher, hauptsächlich für PHP, wo Sie eine globale Variable außerhalb der Schleife definieren könnten.

Jede Hilfe wird sehr geschätzt.

Viele Grüße, 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
quelle

Antworten:

0
  • Sie zitieren keine Pfade,
  • der wmic Fehler, um doppelte Zeilenenden und zu erzeugen
  • Die Tatsache, dass Benutzernamen mit Leerzeichen aufgefüllt sind, ist das Problem, auf das Sie stoßen.
  • Ihre falsche Verwendung des Befehls set, wie bereits von JohnnyVegas erwähnt

Sehen Sie sich diese hexadezimale Beispielausgabe des Befehls wmic an, um dies zu beweisen:

> 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$

Um das Doppelte zu lösen 0x0D, brauchst du ein anderes für.
Der folgende Stapel gibt den Befehl xcopy nur dann wieder, wenn die Ausgabe in Ordnung ist, entfernen Sie das Echo.

@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
LotPings
quelle
0

Verwenden Sie eine administrative Eingabeaufforderung?

Verwenden Sie keine Leerzeichen zwischen '=', und ändern Sie das Skript in. set frompath="c:\from\"Sie möchten den Schalter / s zur xcopy-Zeile hinzufügen, damit Unterverzeichnisse enthalten sind.

JohnnyVegas
quelle