我想知道是否有人可以帮助这个脚本,我尝试用 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 行,以便包含子目录。