2016-09-29 16 views
2

私は単純な環境設定cmdスクリプトを作成しています。私はdoskeyを使ってさまざまなエイリアスとマクロを設定しています。私が取り組んでいる環境にはさまざまなリポジトリがあり、人気のあるディレクトリをすばやくナビゲートするためのマクロをいくつか作成したかったのです。実行時にdoskeyを使って環境変数を評価する

私は現在、次のしている:私は起こるだろう期待していた

@echo off 
Setlocal EnableDelayedExpansion 

set PROJECTS_PATH=%SystemDrive%\Projects 

echo. Updating path... 

REM Update PATH here 

echo. Setting up macros... 

doskey np="%SystemRoot%\System32\notepad.exe" $* 
doskey np+="%ProgramFiles(x86)%\Notepad++\notepad++.exe" $* 
doskey ..=cd .. 
doskey trunk=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk ^& cd "!PROJECT_ROOT!" 
doskey trunk2=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk2 ^& cd "!PROJECT_ROOT!" 
doskey root=cd "%PROJECT_ROOT%" 
doskey tools=cd "%PROJECT_ROOT%\tools" 

何が私が遅れ拡張を使用して、この新たに設定した変数に移動し、その後、PROJECT_ROOT変数を設定するtrunkマクロを使用するということでした。その後、trunk2コマンドを使用すると、PROJECT_ROOT変数がリセットされ、その場所に移動します。最後に、PROJECT_ROOT変数が動的に設定されている場合、roottoolsのマクロは、現在使用しているプロジェクトのルートに関係なく同じになる可能性があります。

マクロを作成すると、PROJECT_ROOTが評価されているように見えるため、残念ながらこれは機能しません。マクロtrunkを実行すると変数が設定され、次にcd ""が実行されます。

PROJECT_ROOT変数が変更された場合にマクロを再評価する方法はありますか?

+1

DOSKEY.exe- DOSプロンプトでコマンドを呼び出して編集し、マクロを作成します。基本的には、バッチファイルからDoskeyマクロを実行することはできません。 – Squashman

+0

上記のスクリプトは、cmdプロンプトを開いて自分の環境を設定するとすぐに呼び出されます。申し訳ありませんが、正確に何を指摘しようとしているのか分かりません。 – Fizz

答えて

1

あなたは、それが代わりに変数を設定し、ターゲットフォルダに変更するので

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "PROJECTS_PATH=%SystemDrive%\Projects" 

    doskey trunk=cd /d "%PROJECTS_PATH%\trunk" $t set "PROJECT_ROOT=%%cd%%" 
    doskey trunk2=cd /d "%PROJECTS_PATH%\trunk2" $t set "PROJECT_ROOT=%%cd%%" 

    doskey root=cd /d "%%PROJECT_ROOT%%" 
    doskey tools=cd /d "%%PROJECT_ROOT%%\tools" 

の作業を取得するために遅延拡張を必要とするアクティブディレクトリを変更して、変数を設定しないでください。

バッチファイル内の%%var%%は、マクロの作成中に変数を展開せずに%var%に変換されます。変数が呼び出されると、変数が展開されます。

+0

それは素晴らしい作品です。 '$ t'を使うと、基本的に何らかのエコーが得られると思うのはなぜですか?たとえば、 'trunk'を使用すると、次の出力が得られます。 ' C:\ Windows \ System32>トランク ' ' C:\ Projects \ Trunk> ' ' C:\ Projects \ Trunk> ' – Fizz

+0

@Fizz、[documentation](https://technet.microsoft.com/en-us/library/bb490894.aspx)では、doskeyマクロ内の' $ T 'は、コマンドの '&'と同じですライン。 –

+0

もちろんですが、マクロで '$ t'の代わりに' ^& 'を使うと、上記のようなエコーが得られません。 '$ t'がそれを引き起こすかどうかは分かりません。 – Fizz

関連する問題