我正在尝试匹配批处理脚本以自动执行this教程,适用于任何系统。
@echo off
for /f "tokens=4* delims= " %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures"') do (set loc=%%A %%B)
set loc=%loc%\Spotlight
set /p loc=Location for images (default - "%loc%") [use %%loc%% for default]?:
start robocopy "%localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets" "%temp%\spotlight"
ren %temp%\spotlight\*.* *.jpg
robocopy "%temp%\spotlight" "%loc%"
start %SystemRoot%\explorer.exe %loc%
但是,如果我尝试输入%loc%\Spotlight2
,则会将其放在Desktop\%loc%\spotlight2
中(桌面是当前的工作目录)。
有没有办法让set /p
获取环境变量?
答案 0 :(得分:0)
SET / P基本上只是一个输入例程。没有记录的方法让它进行进一步的评估,我怀疑是否存在。
可以尝试让CMD评估变量的内容以扩展内容中的任何变量 - 我似乎已经做了这样的事情。但是,我不认为这是做你想做的事情的好方法。
我认为你最好使用更容易输入的内容,并明确地测试它。例如:
set loc=%loc%\Spotlight
echo Enter location for images, or just press [ENTER] to use the default.
echo Default location: %loc%
set userloc=*
set /p userloc=Location?
if not "%userloc%"=="*" set loc=%userloc%
答案 1 :(得分:0)
有一种方法可以做你想要的没有默认位置!它涉及变量操作:
...
setlocal enabledelayedexpansion
set loc=%loc%\Spotlight
set default=%loc%
set /p "loc=Location [%loc%] for default: "
set out=!loc:%%loc%%=%default%!
echo %out%
...
因此,输入%loc%
会将其替换为原始值loc
。
我通过输入%loc%\s
对此进行了测试,并按预期执行。就它是正确的目录而言,这与在此代码之前设置loc值的方式有关。
答案 2 :(得分:0)
输入默认值的常用方法是空输入(保持预定义的varable不变)。但是有一种方法可以启用变量输入。请尝试以下操作并使用%windir%
@echo off
setlocal
set x=%username%
set /p "x=enter value ([ENTER] for default: "%x%") "
call set x=%x%
echo %x%
诀窍是通过使用另一层解析(call
)来扩展变量两次。