Windowsバッチファイル内に次の文字列があります。
"-String"
文字列には、上記のように、文字列の最初と最後に2つの引用符も含まれています。
次の文字列を取得できるように、最初と最後の文字を削除したいと思います。
-String
私はこれを試しました:
set currentParameter="-String"
echo %currentParameter:~1,-1%
これにより、文字列が次のように出力されます。
-String
しかし、編集した文字列をこのように保存しようとすると、失敗します。
set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%
何も印刷されません。私は何を間違えますか?
これは本当に奇妙です。このように文字を削除すると、次のように機能します。
set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%
印刷されます:
-String
しかし、実際には私のバッチはもう少し複雑で、そこでは機能しません。私がプログラムしたものを示します:
@echo off
set string="-String","-String2"
Set count=0
For %%j in (%string%) Do Set /A count+=1
FOR /L %%H IN (1,1,%COUNT%) DO (
echo .
call :myFunc %%H
)
exit /b
:myFunc
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I
set currentParameter=%%I
set currentParameter=%currentParameter:~1,-1%
echo String WITH stripping characters: %currentParameter%
echo .
)
exit /b
:end
そして、出力は次のとおりです。
.
String WITHOUT stripping characters: "-String"
String WITH stripping characters:
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: ~1,-1
.
しかし、私が欲しいのは:
.
String WITHOUT stripping characters: "-String"
String WITH stripping characters: -String
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: -String2
.
括弧で囲まれたブロック内の変数を変更しています。注意してください-新しい値は同じブロック内で使用されません(変数を%ではなく!で区切って、enabledelayedexpansionモードで実行しない限り)。または、()を挿入した単純な行のシーケンスを使用して、2行を別のサブ関数に抽出します。
挨拶、Stach
希望があなたを助けるでしょう。文字を削除せずに文字列をエコーする:%% I
set currentParameter=%%I
set currentParameter=!currentParameter:~1,-1!
echo String WITH stripping characters: !currentParameter!
echo .
それはうまくいくかもしれません。これを一度試してください。
このスクリプトは、ENABLEDELAYEDEXPANSIONを利用します。わからない場合は、バッチスクリプトがforおよびifコマンドをすべて1つに実行します。したがって、次の場合:
if true==true (
@echo off
set testvalue=123
echo %testvalue%
pause >NUL
)
Echo%testvalue%が実行されたときに、testvalueが変更されたことを認識しないため、何も出力されません。 delaydexapnsionを使用すると、スクリプトはその値を現在の状態で読み取ることができ、前に述べた問題を忘れることができます。 %testvalue%と同じように使用しますが、!testvalue!を実行することもできます。これを修正するには:
if true==true (
@echo off
set testvalue=123
echo !testvalue!
pause >NUL
)
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set string="-String","-String2"
Set count=0
For %%j in (%string%) Do Set /A count+=1
FOR /L %%H IN (1,1,%COUNT%) DO (
echo .
call :myFunc %%H
)
exit /b
:myFunc
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I
set currentParameter=%%I
set currentParameter=!currentParameter:~1,-1!
echo String WITH stripping characters: !currentParameter!
echo .
)
exit /b
:end
〜アレックス
同様の問題がありましたが、Ex:set FileName =%Name:〜0,11%の間にスペースを削除することで解決しました# '='の前後にスペースがありませんEx:set FileName =%Name:〜0,11%#Not OR after '='の後のスペースとして機能する
したがって、スペースを削除してみてください。機能するはずです。注:バックグラウンド値を更新するには、コマンドラインを再度開く必要があります。そうしないと、一時的に保存されているのと同じ出力が表示されます。