Windowsコマンドライン-単一の文字列で複数の文字を置換する


4

質問のタイトルが少しわかりにくい場合は申し訳ありませんが、短くしたかったのです。

基本的には、システムの日付形式(%DATE%)を使用して、コマンドで不正な文字やファイル名で不正な文字を置き換えます。たとえば、スペースとスラッシュ。

ただし、これを行う環境は限られています。これは、クライアントのマシンで1行のコマンドを実行するサービスを介して実行されます。これは、(私が知っている限りでは)変数を使用して複数のステップで行うことができないことを意味します。これは、同じ行で作成された変数を見ることができないためです(&と&&を使用してコマンドをリンクする場合)。また、一部のクライアントにシステムにバッチファイルを配置させるのは困難な場合があるため、バッチファイルも問題外です。

現在、コマンドは次のように設定されています。

MOVE C:\folder\file.csv C:\archive\^"file%DATE:/=-%.csv^"

%DATE:/ =-%の部分に複数の文字を置換する方法があるかどうか疑問に思っていました。

現在、引用符はフォーマット内のスペースに関する問題を修正しています。スラッシュをダッシュ​​に置き換えています。日付形式に他の不正な文字が含まれる理由がわからないので、これで問題を解決するのに十分であることを願っていますが、未来。混乱を招く可能性のあるものについては、気軽に説明を求めてください。

回答:


1

まず、出力は短い日付形式に依存するため、「純粋な」コマンドでは日付が本質的に困難です。つまり、次のように出力することができますdd/mm/yyyyyyyy-dd-mm; mm dd yy通常、私はpowershellまたはwmicのいずれかを使用することをお勧めしますが、おそらくあなたのケースでは問題ではないので、2つの可能なトリックが役立ちます:
a)同じ行で変数を設定して読み取るには、call *を使用しますそれは、a正しく動作させるには、このために実行する前に解除しなければなりません:
set "a=10" & call echo %a%
b)のいくつかの可能なセパレータ(ただし、一つだけのもののいずれかを削除するには、あなたはそこになりますどのように多くの知っている必要があります)あなたが使用することができますfor /f
for /f "tokens=1-3 delims=-/" %F in ("%DATE%") do echo %F%G%H

*(注:cmdの起動方法を制御cmd /v:onできる場合は、遅延展開と呼ばれる有効化を使用するため、を使用できますset "a=10" & echo !a!


短い日付に基づいていることはわかっていたので、クライアントごとに設定する必要がないため、潜在的に発生する可能性のあるケースを説明するために複数のものを置き換えたいと思ったのです。遅延拡張を検討していましたが、開始を制御するのではなく、送信されるコマンドのみを制御します。同じライン変数のものを使っていくつかのテストを試して、戻ってきます。ありがとう!
Dominator_101

:私はあなたがバッチコンテキストのousideそれを行うことができないと信じて@Synetech、ここを参照してくださいませんmicrosoft.com/resources/documentation/windows/xp/all/proddocs/...備考:あなたはスクリプトやバッチファイルのSETLOCAL外を使用する場合、それは何を持っています効果。
wmz

@wmzそれは私が調べたときに得た理解でした。ただし、同じ行変数については、私が望んでいたように機能するようです。1セットの%%でそれを行う簡単な方法があればいいのにと思っていましたが、この解決策で仕事は完了します。助けてくれてありがとう!
ドミネーター

@wmz:set a=10 & call echo %a%遅延環境の拡張を有効にしないと仕事ができません。ただし、動作するcmd /v:on /c "set a=42 & echo !a!"ようです。
スコット

@scottはaあなたが実行する前に(それ以外の場合は、古い値で展開されます)の設定を解除にする必要があり、私は答えるためにこれを追加しました(私もに「」追加setの値にスペースを追加することを避けるために、あなたが持っているもの正確なエラー。?
WMZ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.