私の会社では、私たちは私たちのマシンを扱うためにさまざまな顧客のためのソフトウェアを作ります。各製品はユニークなので、コントロールソフトウェアもそうではありませんが、全く新しいものではありません。だから私たちは古いプロジェクトをコピーして名前を変更し、それが適合するまで変更します。 通常、ディレクトリ名は新しいプログラムの名前です(ideはディレクトリ名を使用しますが、同じ名前体系に従う他のファイルも使用します)。 名前を変更するために、私は古い名前体系を見つけ、ディレクトリ名から新しい名前体系を検索する短いバッチスクリプトを作成しました。 しかし、これで見つけた唯一の解決策は、各ファイルの名前を変更するための新しいバッチファイルを使用することです。 !progNeuのコンテンツを入手するには、より良い方法がありますか? ?バッチスクリプト異なる変数部分から文字列を作成する方法
@echo off
SETLOCAL enabledelayedexpansion
set pfad=%CD%
for /d %%A in (%pfad%) do (set progNeu=%%~nxA)
for /f "tokens=1,2 delims=|" %%B in ('dir /b *.s19 ^| findstr /v "appl"') > do (
set progAlt=%%B
set rumpfAlt=!progAlt:.s19=!
>x ECHO !rumpfAlt!&FOR %%C IN (x) DO SET /A strlength=%%~zC - 2&del x
for %%D in (!rumpfAlt!*.*) do (
set progAlt=%%D
>x.bat echo @echo off
>>x.bat echo set ausg=!progAlt!
>>x.bat echo echo %%ausg:~!strlength!%%
for /f "" %%E in ('x.bat') do (
set "dateiNeu=!progNeu!%%E"
if exist !dateiNeu! del !dateiNeu!
rename %%D !dateiNeu!
)
del x.bat
)
)
Hello MC ND – Mecki
からechoを削除すると、echo move/y "%% D" "%%〜nxA %%〜E" が正しく実行されます。私はちょっと驚いています。なぜなら、私は "FOR"ループのバッチ概念に慣れていないからです。単一のコマンドを処理するためにループを使用するのは変です。 しかし、なぜあなたは2番目の行にsetlocal [...] disabledelayedexpansion を設定して、後でそれを元に戻しましたか? – Mecki
@Mecki、部分文字列置換を行うには遅延拡張が必要です(コードブロック内で同じ変数を設定して読み込みます)が、遅延拡張が有効な部分文字列演算の結果に変数を設定すると、 '! '値の場合、変数を展開しようとするパーサによって削除されます。これを防ぐため、遅延拡張は必要なときにのみ有効になり、操作の結果は 'for'置換可能パラメータの中に取り込まれ、遅延拡張は無効になります。ファイル名/パスに '!'が含まれているかどうかはわかりませんが、これを安全にコーディングする方法です。 –