Wie kann ich „Ausschneiden“ in der Windows-Eingabeaufforderung ersetzen?

Wie kann ich „Ausschneiden“ in der Windows-Eingabeaufforderung ersetzen?

Ich habe ein Verzeichnis mit einer Reihe von Unterordnern, die einem Namensmuster entsprechen, wie:

sub-123
sub-0815
sub-4711

In diesen Ordnern habe ich einige Dateien mit der gleichen Nummer im Namen, wie sie im Ordnernamen gefunden wurde. Beispielsweise enthält der Ordner sub-123 die Dateien

input-123
output-123

Ich möchte den Ordner iterieren, das Arbeitsverzeichnis in den aktuellen Ordner ändern und einige Verarbeitungen mit dem entsprechenden Satz von Dateien durchführen. Während ich die Ordner iterieren kann mit

for /d %%d in (sub-*) do .

Ich brauche den Teil des Ordnernamens, der mit dem Sternchen übereinstimmt, im obigen Beispiel also "123". Wie kann ich die 123 aus dem Ordnernamen extrahieren und einen Befehl wie diesen erstellen?

cd sub-123
copy input-123 output-123

in einer Windows-7-Batchdatei? In der Linux-Umgebung könnte es möglich sein, den Befehl „cut“ oder einen beliebigen regulären Ausdruck zu verwenden. Aber wie gehe ich in der Windows-Eingabeaufforderung vor?

Antwort1

Ich habe es selbst gefunden. Der Set-Befehl hat eine erweiterte Variablensubstitution. Diese kann aber nicht im forBody selbst verwendet werden. Es ist notwendig, einen neuen Bacth-Aufrufkontext zu starten:

for /d %%d in (sub-*) do (
  set item=%%d
  pushd %%d
  call :build
  popd
)
goto :eof

:build
  set item=%item:sub-=%
  copy input-%item% output-%item%
:eof

Das „Element“ wird nicht exakt aus der Zeichenfolge erstellt, die mit dem Sternchen übereinstimmt, ist aber gleichwertig.

Antwort2

Ich habe auch eine direkte Antwort gefunden. Sie liegt nah an der Cut-Semantik.

Der Befehl set hat auch eine Teilzeichenfolgensyntax. Um n Zeichen zu überspringen, verwenden Sie %variable:~n%. Um n Zeichen ab Offset k zu erhalten, verwenden Sie%variable:~k,n%

for /d %%d in (sub-*) do (
  set item=%%d
  set num=%item:~4%
  pushd %%d
  copy input-%num% output-%num%
  popd
)

verwandte Informationen