2017-12-08 13 views
0

임의의 시스템에 대해 this 자습서를 자동으로 수행하도록 배치 스크립트를 대조하려고합니다. 내가 %loc%\Spotlight2를 입력하려고하면set/p 환경 변수를 사용하지 않음

@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% 

그러나,이 Desktop\%loc%\spotlight2에 배치 (바탕 화면은 현재 작업 디렉토리입니다).

set /p에 환경 변수를 적용 할 수있는 방법이 있습니까?

+0

변수 loc를 % loc %로 설정하고 이전 내용과 같을 것으로 기대할 수 없습니다. 당신이해야 할 일은 그들이 디폴트를 사용하기 위해 엔터를 치라고 말해주는 것입니다. – Squashman

답변

0

기본값을 입력하는 일반적인 방법은 빈 입력입니다 (사전 정의 된 변수는 변경되지 않습니다). 그러나 변수 입력을 가능하게하는 방법이 있습니다. 다음을 시도하고 %windir%

@echo off 
setlocal 
set x=%username% 
set /p "x=enter value ([ENTER] for default: "%x%") " 
call set x=%x% 
echo %x% 

트릭은 (call 아 파크) 분석의 또 다른 레이어를 사용하여 두 변수를 확장하는 것입니다로 질문에 대답.

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% 
+0

그래서 내가 원하는 것을 할 방법이 없습니까? – Modelmat

+0

제안 된 대체 접근 방식이 해당 시나리오에 적합하지 않다고 생각하는 특별한 이유가 있습니까? –

+1

그건 내가 원하는대로 작동하지 않는다. 단지'% loc % \ s'를 입력 할 수 없다. 내가 사용했던 것 중 하나가 좀 더 멋지게 포맷 된 것입니다. – Modelmat

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의 값을 설정하는 방법과 관련이 있습니다.