Script em lote simples para copiar o arquivo para locais com base no nome de usuário

0

Eu queria saber se alguém pode ajudar com este script, eu tentei substituir a linha xcopy com

echo %frompath%

e isso não equivale a nada, é como se o escopo não estivesse correto, mas eu não tenho certeza, principalmente usado para PHP, onde você seria capaz de definir uma variável global fora do loop.

Qualquer ajuda será muito apreciada.

Atenciosamente, 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
    
por Lewis Stevens 21.06.2018 / 11:03

2 respostas

0
  • Você não cita pathes,
  • a falha geométrica para produzir terminações de linha duplicadas e
  • o fato de os nomes de usuário serem preenchidos com espaços são os problemas que você encontro.
  • Seu uso errado do comando set como já mencionado por JohnnyVegas

Veja esta saída hexadecimal de exemplo do comando wmic para provar isso:

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

Para resolver o 0x0D duplicado, você precisa de outro para.
O lote a seguir apenas ecoa o comando xcopy, se a saída for OK, remova o eco.

@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
    
por 21.06.2018 / 13:50
0

Você está usando um prompt de comando administrativo?

Não use espaços entre '=', portanto, mude o script para set frompath="c:\from\" - Você desejará adicionar a opção / s à linha xcopy para que os subdiretórios sejam incluídos.

    
por 21.06.2018 / 11:51