如何为 "If %variable%==*ANYTHING* perform task" 编写脚本?
How do I script for "If %variable%==*ANYTHING* perform task"?
我正在尝试添加到我一直在处理的脚本(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
更改为该值。我不确定如何得到这个结果。是的,我知道它必须是 运行 作为管理员。
我建议使用以下注释代码来处理用户输入的字符串:
@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
更新,DefaultUserName
在 Windows 7 x64 上默认不存在,或者 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
默认包含一个空的名称为 DefaultUserName
.
的字符串值
上面的代码将它添加到 Windows AMD64 上的 64 位应用程序的注册表项,而使用带有 SysWOW64
的注释行会将注册表值添加到 AMD64 上的 32 位应用程序的注册表项WindowsAMD64.
另请参阅 Microsoft 文档页面:
要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
goto /?
if /?
reg /?
reg add /?
rem /?
set /?
setlocal /?
我正在尝试添加到我一直在处理的脚本(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
更改为该值。我不确定如何得到这个结果。是的,我知道它必须是 运行 作为管理员。
我建议使用以下注释代码来处理用户输入的字符串:
@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
更新,DefaultUserName
在 Windows 7 x64 上默认不存在,或者 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
默认包含一个空的名称为 DefaultUserName
.
上面的代码将它添加到 Windows AMD64 上的 64 位应用程序的注册表项,而使用带有 SysWOW64
的注释行会将注册表值添加到 AMD64 上的 32 位应用程序的注册表项WindowsAMD64.
另请参阅 Microsoft 文档页面:
要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
goto /?
if /?
reg /?
reg add /?
rem /?
set /?
setlocal /?