根据用户名将文件复制到位置的简单批处理脚本

根据用户名将文件复制到位置的简单批处理脚本

我想知道是否有人可以帮助这个脚本,我尝试用 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

答案1

  • 你没有引用路径,
  • wmic 漏洞导致行尾重复,并且
  • 您遇到的问题是用户名中填充了空格。
  • 正如已经提到的,你错误地使用了 set 命令强尼维加斯

请参阅 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您需要另一个 for。
以下批处理仅回显 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

答案2

您是否使用管理命令提示符?

不要在“=”之间使用空格,因此将脚本更改为set frompath="c:\from\"- 您需要将 /s 开关添加到 xcopy 行,以便包含子目录。

相关内容