2017-12-08 1 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%に設定することはできません。また、以前と同じ内容にすることはできません。デフォルトを使用するには、Enterキーを押すように指示するだけです。 – 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 whith)の解析の別の層を使用することにより、二回変数を展開しているとの質問に答えます。

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の値を設定する方法と関係しています。

関連する問題