¿Cómo puedo reemplazar "cortar" en el símbolo del sistema de Windows?

¿Cómo puedo reemplazar "cortar" en el símbolo del sistema de Windows?

Tengo un directorio con un conjunto de subcarpetas que coinciden con un patrón de nombre, como:

sub-123
sub-0815
sub-4711

Dentro de estas carpetas tengo algunos archivos con el mismo número en el nombre que se encontró en el nombre de la carpeta. por ejemplo, la carpeta sub-123 contiene los archivos

input-123
output-123

Quiero iterar la carpeta, cambiar el directorio de trabajo a la carpeta actual y realizar algún procesamiento con el conjunto de archivos apropiado. Si bien puedo iterar las carpetas con

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

Necesito la parte del nombre de la carpeta que coincide con el asterisco, en el ejemplo anterior "123". ¿Cómo puedo extraer el 123 del nombre de la carpeta y crear un comando como

cd sub-123
copy input-123 output-123

¿Dentro de un archivo por lotes de Windows-7? En el entorno Linux, es posible utilizar el comando cortar o cualquier expresión regular. Pero, ¿cómo debo acceder al símbolo del sistema de Windows?

Respuesta1

Lo encontré yo solo. El comando set tiene una sustitución de variables mejorada. Pero no se puede utilizar en el forpropio cuerpo. Es necesario iniciar un nuevo contexto de llamada bath:

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

El "elemento" no se construye exactamente a partir de la cadena que coincide con el asterisco, pero es equivalente.

Respuesta2

También encontré una respuesta directa. Está cerca del corte semántico.

El comando set también tiene una sintaxis de subcadena. Para omitir n caracteres utilice %variable:~n%. Para obtener n caracteres comenzando en el desplazamiento k use%variable:~k,n%

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

información relacionada