Si ejecuto esto en un archivo por lotes dentro de la carpeta de archivos MP4, funciona para configurar el último archivo MP4 modificado como una variable, para que pueda reproducirse con el reproductor multimedia predeterminado:
:: Set last modified MP4 file in current folder, as a variable...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"
:: Play the file (opens in default media player)...
"%newest%"
Si intento colocar lo siguiente en un archivo por lotes fuera de la carpeta de archivos MP4, cd /d
el bucle for lo ignora y no funciona:
:: Change to directory containing MP4 files...
cd /d "C:\My Videos"
:: Set last modified MP4 file in "C:\My Videos", as a variable (not working)...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"
:: Copy the MP4 to current folder...
xcopy "%newest%" "%CD%" /i /r /v /k /f /c /h /y >nul 2>&1
:: Change back to current directory
cd /d "%CD%"
Como puede ver, el comando del bucle for es exactamente el mismo en cada ejemplo. Funciona en el primero, pero no en el segundo.
Intenté poner pause
entre cada comando para ver si aparece algún error, ninguno aparece.
Intenté quitar las comillas dobles %CD%
, no hay diferencia.
Intenté poner Setlocal EnableDelayedExpansion
antes de los comandos, no hace nada.
Anteriormente, intenté especificar la carpeta directamente en el bucle FOR, agregándola /S
al comando DIR, pero eso copia el archivo MP4 incorrecto por alguna razón, donde la fecha de modificación era una fecha aleatoria sin sentido, no era el último MP4 modificado. Ese comando fue así:
for /f "eol=: delims=" %%F in ('dir /B /S /O:D "C:\My Videos\*.mp4"') do @set "newest=%%F"
Eso establece un MP4 como variable... ¡pero no el correcto!
Usando un archivo por lotes dentro de la carpeta de archivos MP4, sé que siempre funciona de esa manera.
Gracias de antemano a cualquiera que pueda arrojar algo de luz sobre por qué esto no funciona.
Respuesta1
Su script supone que %CD%
conservará su valor original de principio a fin. Pero no es así como funciona esta variable: el intérprete la actualiza dinámicamente para representar siempre el directorio actual. Y después de tu primera cd
orden, el caminoC:\My Videos
se convierteel directorio "actual".
Entonces dir
busca archivos en la nueva ubicación e intenta xcopy
copiar los archivos encontrados nuevamente a la misma ubicación en la que se encontraron y finalmente cd /d "%CD%"
dice "cambiar al directorio en el que ya estoy". No te devolverá a la ubicación anterior porque en este punto %CD%es"C:\Mis vídeos".
Debes registrar explícitamente la ruta anterior.antescd en otro lugar, por ejemplo, usando set "PrevDir=%CD%"
.