如何编写“If %variable%==*ANYTHING* 执行任务”的脚本?

问题描述 投票:0回答:1

我正在尝试添加到我一直在编写的脚本中(Compo 提供了很大的帮助)以合并用户输入。我目前有:

SET /p KIOSK=Enter NEW account here or leave blank to QUERY for current account  _
ECHO. 
IF "%KIOSK%"==* @%SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultUserName" /D %KIOSK% /F 1>NUL && ECHO Kiosk account changed to %KIOSK% || ECHO Kisok account NOT changed 
IF "%KIOSK%"=="" ECHO Querying for current account . . .

我想要的是

@%SystemRoot%\System32\reg.exe ADD
DefaultUserName
更改为用户输入的任何内容。
KIOSK
看起来像这样:“K#######”,其中
#
可以是 0-9 中的任何数字。所以基本上,
IF %KIOSK%==
实际上是任何东西,我希望将
DefaultUserName
更改为该值。我不知道如何得到这个结果。是的,我知道它必须以管理员身份运行。

if-statement batch-file variables
1个回答
0
投票

我建议使用以下注释代码来处理用户输入的字符串:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

:PromptUser
set "KIOSK="
set /P "KIOSK=Enter NEW account here or leave blank to QUERY for current account: "
if not defined KIOSK goto QueryAccount

rem Remove all double quotes from user entered string.
set "KIOSK=%KIOSK:"=%"
rem Prompt the user again on having only double quotes entered.
if not defined KIOSK goto PromptUser
rem Prompt the user again if the first characeter is not an upper case K.
if not "%KIOSK:~0,1%" == "K" goto PromptUser
rem Prompt the user again if there is not at least one more character.
if "%KIOSK:~1%" == "" goto PromptUser
rem Prompt the user again if the user entered string contains
rem other characters than digits after the first character K.
for /F "tokens=1* delims=0123456789" %%I in ("%KIOSK%") do if not "%%J" == "" goto PromptUser

set "RegExe=%SystemRoot%\System32\reg.exe"
if exist "%SystemRoot%\Sysnative\reg.exe" set "RegExe=%SystemRoot%\Sysnative\reg.exe"
rem if exist "%SystemRoot%\SysWOW64\reg.exe" set "RegExe=%SystemRoot%\SysWOW64\reg.exe"
%RegExe% ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /V "DefaultUserName" /D %KIOSK% /F 1>NUL && echo Kiosk
goto EndBatch

:QueryAccount
echo Querying for current account ...

:EndBatch
endlocal

我不确定

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
是否应该更新为
DefaultUserName
(默认情况下在 Windows 7 x64 上不存在)或
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
(默认情况下包含名称为
DefaultUserName
的空字符串值。

上面的代码将其添加到 Windows AMD64 上的 64 位应用程序的注册表项,而使用带有

SysWOW64
的注释行会将注册表值添加到 Windows AMD64 上的 32 位应用程序的注册表项。

另请参阅 Microsoft 文档页面:

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • reg /?
  • reg add /?
  • rem /?
  • set /?
  • setlocal /?
© www.soinside.com 2019 - 2024. All rights reserved.