我已将一个批处理文件写入“备份用户配置文件”,但我想使其成为白痴证明。
几次我实际上已将批处理文件留在桌面上并在自己的配置文件上运行,并且由于该批处理文件包含一个robocopy命令来复制Desktop文件夹,因此在一个文件夹内创建了一个无限循环的重复文件夹,这就是由于256个字符的限制,很难摆脱。
我正在尝试获取批处理文件,以在执行之前检查其自身位置是否不在用户配置文件中。
昨晚我在用IF命令搞乱,这是我想出的:
@ECHO off
SET /P %UserName%=Enter Username:
IF "%~dp0"=="C:\Users\%UserName%\NUL" (
GOTO ERROR
) ELSE (
GOTO PROFILEBACKUP
)
:PROFILEBACKUP
REM To Be replaced by Profile Backup Script
ECHO Correct Location
:ERROR
ECHO Move ProfileBackup.CMD to another location
但是我得到的唯一输出是:
Enter Username: smithsl
Correct Location
Move ProfileBackup.CMD to another location
任何帮助,将不胜感激
这是一个批处理代码的建议,用于检查批处理文件的位置是否在用户的配置文件目录树中。
@echo off
setlocal EnableDelayedExpansion
set "BatchPath=%~dp0"
:EnterName
rem Define as default name of current user.
set "NameOfUser=%UserName%"
set /P "NameOfUser=Enter user name (default: %NameOfUser%): "
rem Remove double quotes from entered string.
set "NameOfUser=!NameOfUser:"=!"
rem Were something different than just double quotes entered?
if "%NameOfUser%"=="" goto EnterName
rem Remove also angle brackets and exclamation marks.
set "NameOfUser=!NameOfUser:<=!"
if "%NameOfUser%"=="" goto EnterName
set "NameOfUser=!NameOfUser:>=!"
if "%NameOfUser%"=="" goto EnterName
set "NameOfUser=%NameOfUser:!=%"
if "%NameOfUser%"=="" goto EnterName
rem Starts the path of the batch file with C:\Users\entered user name?
if not "!BatchPath:C:\Users\%NameOfUser%=!" == "%BatchPath%" goto LocationError
rem To be replaced by profile backup script
echo Correct Location
endlocal
goto :EOF
:LocationError
echo Move %~nx0 to another location.
endlocal
goto :EOF
尽管已经进行了一些检查用户无效输入的测试,但是它仍然不是傻瓜证据,因为当用户可以输入某些内容时,这几乎是不可能的。
您犯的错误是分配输入值,%UserName%
这意味着,例如Scott
,如果您的用户帐户名是,则将输入的字符串分配给具有name的环境变量,Scott
而不分配给具有name的环境变量UserName
。当然UserName
,用批处理脚本覆盖预定义的环境变量值不是一个好主意。
打开命令提示符窗口,在此执行set /?
并阅读打印在控制台窗口中的帮助,以了解通过使用额外延迟的环境变量扩展来在此批处理代码中使用的字符串替换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句