2011-01-04 02:42:12 +0000 2011-01-04 02:42:12 +0000
28
28

¿Cómo extraer parte de una cadena en un archivo por lotes de Windows?

Supongamos que tengo un valor como “Abc_123” que está almacenado en una variable en un archivo batch (cmd). Quiero terminar con una variable que contenga sólo “123”. ¿Existe alguna forma integrada de hacer esto?

No soy muy exigente con el método, ni con el rendimiento, siempre que esté integrado en un sistema Windows típico (Vista/2008).

Respuestas (4)

39
39
39
2011-01-04 02:58:22 +0000

Utilice la sintaxis de la subcadena:

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123
7
7
7
2018-07-02 15:51:27 +0000

Si sólo quieres todo lo que hay después del guión bajo (y no sabes necesariamente la longitud de la cadena o dónde está el guión bajo, pero puedes confiar en que sólo hay un guión bajo), prueba:

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

Básicamente, su cadena se dividirá en tokens utilizando el guión bajo como delimitador (delims=_). Sólo el segundo (tokens=2) se pasará (como variable %%a) al bucle for. El bucle sólo se ejecutará una vez, ya que en este caso se trata de una sola cadena.

Si quieres guardar lo que hay antes y después del guión bajo, prueba:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)

Observe que %%a es la variable para el primer token de la división; %%b es la variable para el segundo token de la división.

3
3
3
2011-01-04 03:14:44 +0000

Si encuentras que el lenguaje de lotes no es lo suficientemente potente para hacer lo que quieres -y probablemente no te llevará mucho tiempo llegar a ese punto- puedes usar el Windows PowerShell . No está instalado por defecto en todas las versiones de Windows, pero puedes descargarlo gratuitamente.

Si no te gusta el lenguaje PowerShell, está Perl. Aunque tendrás que instalarlo en todos los sistemas. También hay otros.

1
1
1
2019-10-29 13:32:58 +0000
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%