Мне было интересно, если кто-то может помочь с этим сценарием, я попытался заменить строку xcopy с

echo %frompath%

и это просто ничего не говорит, это как если бы область действия была неправильной, однако я не уверен, в основном используется для PHP, где вы сможете определить глобальную переменную вне цикла.

Любая помощь будет оценена.

С наилучшими пожеланиями, Льюис

@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

2 ответа2

0

Вы используете административную командную строку?

Не используйте пробелы между '=', поэтому измените скрипт для set frompath="c:\from\" - вы захотите добавить ключ /s в строку xcopy, чтобы включить подкаталоги.

0
  • Вы не цитируете пути,
  • Wmic недостаток для получения удвоенных концов строки и
  • тот факт, что имена пользователей дополняются пробелами, это проблемы, с которыми вы сталкиваетесь.
  • Ваше неправильное использование команды set, как уже упоминалось JohnnyVegas

Посмотрите этот пример шестнадцатеричного вывода команды wmic, чтобы доказать это:

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

Чтобы решить удвоенный 0x0D вам нужен другой для.
Следующий пакет только выводит команду xcopy, если вывод в порядке, удалите эхо.

@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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .