gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:44:55 26 4
gpt4 key购买 nike

我已经写了一个批处理文件来备份用户配置文件,但我想让它成为白痴证明。

有几次我实际上将批处理文件留在了我的桌面上并在我自己的配置文件上运行它,并且由于批处理文件包含一个用于复制桌面文件夹的 robocopy 命令,它在一个和另一个文件夹中创建了一个重复文件夹的无限循环, 由于 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,则输入的字符串将分配给环境变量名称为 Scott 而不是名称为 UserName 的环境变量。用批处理脚本覆盖预定义的 UserName 环境变量值当然不是什么好主意。

打开命令提示符窗口,在那里执行 set/? 并阅读打印到控制台窗口中的帮助,以了解使用额外延迟的环境变量扩展在该批处理代码中使用的字符串替换。

关于windows - 执行前检查批处理文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com