Windows 10, en mi propia carpeta Vídeos en Perfil de usuario.
Estoy tratando de unir un par de cosas para crear un archivo de texto completo que contenga diversa información, en una sola línea de comando, ¿verdad?
El objetivo es crear un texto único con un encabezado, información generada y un pie de página. El texto tendrá el mismo nombre que el nombre de la carpeta al .txt
final, por razones de simplicidad.
Mi objetivo es ejecutar la cadena de comandos una vez por carpeta, y dado que hay bastantes llamadas al nombre de la carpeta a la que se dirige, pensé en usar una variable para acortarla.
type header.txt > VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./VeryLongFolderNameFooBar/*.mkv >> VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt & type footer.txt >> VeryLongFolderNameFooBar\VeryLongFolderNameFooBar.txt
Esto funcionó absolutamente perfectamente, pero se volvió bastante tedioso cambiar el nombre de la carpeta para todas las apariciones, así que ¿por qué no usar una variable, verdad?
set a=VeryLongFolderNameFooBar && type header.txt>%a%\%a%.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./%a%/*.mkv>>%a%\%a%.nfo & type footer.txt>>%a%\%a%.txt
Esto da tres access denied
mensajes. Inicialmente estaba usando espacios antes y después de las llamadas a variables y los eliminé después de leer una publicación que decía que los espacios pueden estropear las cosas, pero todavía no sirvió de nada y estoy realmente estancado en esto. Cuando lo hago, echo %a%
devuelve el nombre de la carpeta sin ningún problema.
¿Qué me estoy perdiendo?
Respuesta1
CMD escanea toda la línea en busca de variables antes de procesarlas. Por lo tanto, lo reemplaza %a%
con nulo (o lo que sea que esté configurado previamente) antes de procesar el set a=...
comando. Deberá hacerlo en una línea separada:
set a=VeryLongFolderNameFooBar
type header.txt>%a%\%a%.txt & c:\mediainfo\mediainfo.exe --output=file://template.txt ./%a%/*.mkv>>%a%\%a%.nfo & type footer.txt>>%a%\%a%.txt
Pero, además (como descubriste), el set
comando (estúpidamente, en mi humilde opinión) incluye todo hasta un separador de comandos. Entonces
set a=SoLong & echo /%a%/
se establecerá a
en SoLong
(con un espacio al final). Una forma de manejar esto es omitir el espacio antes de &
:
set a=SoLong& echo ...
pero se considera que es menos legible. Una solución un poco mejor es poner el set
comando entre paréntesis:
(set a=SoLong) & echo ...
por lo que el valor termina en )
.