set / p没有采用环境变量

时间:2017-12-08 23:04:27

标签: batch-file cmd

我正在尝试匹配批处理脚本以自动执行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获取环境变量?

3 个答案:

答案 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)来扩展变量两次。

相关问题