首页 > 解决方案 > 如何正确设置地址中的 %UserProfile%

问题描述

如果我有call C:\Users\user\Desktop\Main\folder\edit.bat

设置这个的正确方法是什么:我想消除C:\Users\user\Desktop,并使我的批处理通用,以便我可以插入任何计算机,从 USB 或外部运行它,或者只是将我的批处理添加到任何人计算机的桌面. 无需再次编辑源或目标即可运行它。

如果我想让它从任何计算机上运行我的edit.bat,我是否像这样设置它

call %SystemRoot%\Main\folder\edit.bat

call %UserProfile%\Desktop\Main\folder\edit.bat

call %UserProfile%\Main\folder\edit.bat

如果我理解 Mofi 正确,我可以改变这个

call "C:\Users\user\Desktop\Main\folder\edit.bat"

call "C:\users\%username%\Desktop\Main\folder\edit.bat"作品
及本
call "%UserProfile%\Desktop\Main\folder\edit.bat"作品原创

谁能告诉我这是否正确
call "%~dp0\edit.bat"

标签: batch-file

解决方案


如果我正确理解您的问题,您希望将 .bat 放在 USB 上,插入并运行它,然后将文件从目录复制到 USB。在这种情况下,下面的简单脚本将起作用。假设您在客户端上选择的路径是静态的并且不会变化,例如%userprofile%\desktop\%userprofile%\documents\

@echo off
REM This .bat file will be on the USB drive.

set "usb=%~dp0"
set "new_path=%usb%%computername%\%username%"    

if not exist "%new_path%" mkdir "%new_path%"
xcopy "%userprofile%\main\folder\files\*" "%new_path%\" /Y

if errorlevel 1 (
    echo ERROR OCCURRED - %ERRORLEVEL%
    pause
    exit /b
)
echo Successfully copied files to "%new_path%"
timeout /t 3
exit /b

解释

首先,我们在闪存驱动器上创建一个目录,如果它不存在,那么所有文件都整齐有序地放在 USB 上。

if not exist检查目录。mkdir创建目标目录。很明显,但仍然如此。

%~dp0定义 .bat 文件所在的工作目录。欲了解更多信息这是一个很棒的帖子

%userprofile%环境变量默认等于 directory C:\users\%username%\,并%computername%扩展为计算机的名称。

xcopy获取源目录并复制到我们之前创建的目的地。/Y强制复制并且不提示覆盖文件。

*是通配符。这是一个很好的网站,也是这个脚本中的所有内容。请注意,通配符只能用在目录的末尾。类似的东西C:\users\*\desktop\*\files\*不会解决。对于类似的事情,您需要使用for /D.

最后,我总是喜欢检查错误,看看它是否成功。如果不是,我们pause确保我们看到错误,或者我们输入 atimeout /t seconds看到成功。

编辑

设置路径变量以考虑用户名中的空格,并修复了原始脚本中引起我注意的几个其他错误。


推荐阅读