执行前检查批处理文件的位置

斯科特·史密斯

我已将一个批处理文件写入“备份用户配置文件”,但我想使其成为白痴证明。

几次我实际上已将批处理文件留在桌面上并在自己的配置文件上运行,并且由于该批处理文件包含一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何从批处理文件中检查文件是否存在

来自分类Dev

执行位于jar文件中的批处理文件

来自分类Dev

从同一位置的批处理文件中执行.msi

来自分类Dev

如何使批处理文件执行reg文件

来自分类Dev

检查批处理文件中的错误级别

来自分类Dev

使用参数执行批处理文件

来自分类Dev

简单批处理文件未执行?

来自分类Dev

如何从批处理文件中检查文件是否存在

来自分类Dev

检查批处理文件中的特定字符

来自分类Dev

批处理文件以检查所需的最低Java版本

来自分类Dev

批处理文件:检查是否存在带模式的文件

来自分类Dev

在Powershell中执行批处理文件

来自分类Dev

批处理文件-检查命令是否可用

来自分类Dev

如何检查批处理文件中是否存在变量?

来自分类Dev

如何检查批处理文件中的某些文本输入?

来自分类Dev

从JAVA执行批处理文件并捕获批处理环境

来自分类Dev

批处理文件-检查exe的输出

来自分类Dev

检查批处理文件中的错误级别

来自分类Dev

使用参数执行批处理文件

来自分类Dev

简单批处理文件未执行?

来自分类Dev

如何从批处理文件中检查文件是否存在

来自分类Dev

在批处理文件中执行makefile

来自分类Dev

使用dos()执行批处理文件

来自分类Dev

批处理文件:递归检查文件属性

来自分类Dev

使用批处理文件执行多个命令并使用批处理文件安装MySQL

来自分类Dev

执行批处理文件时出错

来自分类Dev

Windows批处理文件执行错误

来自分类Dev

批处理文件以自动执行树命令> pdf文件

来自分类Dev

当 .log 文件包含文本时执行批处理文件