2017-10-08 9 views
0

引数として渡された文字列をバッチファイルに置き換えようとしています。 PWD変数内で渡される引数の親ディレクトリのパスを置くSETを使用して%〜db1を置き換えます。

set PWD="%~dp1" 
set "PWD=%PWD:\=/%" 

をした後、/文字に\文字を置き換えます:

これは動作します。

2つではなく、のコマンドを実行することで、この1つのライナーを実現する方法はありますか?

このようなもの:set "PWD=%~dp1:\=/%しかし、明らかに機能しません。

DelayedExpansionを使用し、使用していない両方の方法を詳しく説明してください。

+0

技術的には、 '%PWD%'変数には最初のパラメータ/引数の親パスが含まれます。 – Compo

答えて

1

投稿する前にテストしましたか?

それが「正しい結果」を生成した場合

PWD=\=/ 

が生成されますあなたのコードは、それはあなたが(直接@echo off後に通常setlocalによって)各実行の終わりにpwdをクリアしていないためですので、結果は現在の%~dp1ですが、前の設定はpwdです。

あなたのコードでは、最初に(引用符を含む)PLUS &スペース"c:\whatever..."するpwdを設定し、に再び/に置き換え\とPWDの前の値をpwdを設定します。

cmdは、最初に%var%を含む式を解決し、、次にが結果を実行します。 delayedexpansionでは、ランタイムおよび%var%であり、の解析時間は、であると評価されます。

metavariablesでは文字列操作が許可されていないため、必要な操作を1つのステートメントに集約することはできません。その値は最初に通常の環境変数に渡されなければなりません。

最初pwdに値を代入した後、サブシェルで文字列操作を実行します

set "PWD=%~dp1" & CALL set "PWD=%%PWD:\=/%%" 

を使用し、あなたの文を修正するには - 引用が実行されるコマンドを区切る移動 - の後に、次のスペース引当金はではなく、が割り当てられた値に含まれます。

+0

ありがとうございました。また、私が持っていたスペース文字の問題も参照しました。変数を正しく操作するために 'CALL'に頼らざるを得ないことに少し失望していますが、期待どおりに動作するようです。私は説明を感謝します! –

関連する問題