manipulación de símbolos de cadena en archivos por lotes?
-
05-07-2019 - |
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?
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.