Pregunta

¿Hay alguna forma de tomar subcadenas de una cadena con archivos .bat / .cmd?

Por ejemplo, dada la cadena " hello.txt " ¿Hay alguna manera de quitar el .txt?

EDITAR: ¿También hay una forma más general de hacer esto, no bajo el supuesto de que es un nombre de archivo o ruta de archivo?

¿Fue útil?

Solución

Si este es un archivo pasado como parámetro, puede usar% ~ n1, de esta manera:

test.bat
----------
echo %~n1 %~n2

c:\> test.bat myfile.txt my.long.file.bat
  myfile my.long.file

Si conoce la longitud de la cadena, puede usar el operador de subcadena:

echo %variable:0,4%   =>  "test.txt" => "test"

Y para obtener todo EXCEPTO los últimos 4 caracteres:

echo %variable:~0,-4%  => "file...name.txt" => "file...name"

Otros consejos

La sintaxis general de la subcadena en los archivos .cmd (y los archivos .bat posteriores a Win95) es:

%variable:~num_chars_to_skip,num_chars_to_keep%

Esta página ofrece más opciones: VarSubstring

Para subcadenas y otras sustituciones de variables interesantes. métodos con los que puede obtener ayuda:

  

set /?

Para el análisis de cadenas (por ejemplo, encontrar un '.' en una cadena) intente

  

para /?

Pruebe help set para un procesamiento de cadena disponible para cmd.exe. La ayuda para set incluye cosas que puedes hacer normalmente, fuera del comando 'set'

Puedes hacer cosas como

set source=hello.txt
REM print hello
echo %source:~0,-4%
REM print o.t
echo %source:~4,3%
REM print help.txt
echo %source:lo=p%
REM etc
echo %source:llo=%

Puede haber algo incorrecto en el 'código' anterior. Lo escribo desde la memoria, sin un cmd.exe disponible cerca de mí para probar.

La mejor manera es simplemente instalar python (o perl) Créeme, he intentado casi todo, y es solo dolor de cabeza hacer manipulación de texto en 'DOS' (o en realidad cualquier otra cosa).

Para una cadena arbitraria, no lo creo.

Para este ejemplo, % ~ n1 se resolverá con un nombre sin extensión.

También puede consultar la documentación de call (call /?) para obtener también información de subcadenas específicas de archivos y directorios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top