file - online - como cambiar el tipo de archivo en windows 7
Reemplazar archivo viejo con archivo nuevo (2)
Estoy intentando escribir una secuencia de comandos para reemplazar contenido de archivos antiguos con contenido de archivos nuevos que aparece en el siguiente formato:
Archivo antiguo: algo.txt
Nuevo archivo: something.txt.new
El archivo antiguo debe reemplazarse con el contenido del archivo nuevo
Nuevo nombre de archivo a cambiar de nombre sin nuevo
El archivo viejo necesita ser borrado
La secuencia de comandos siguiente no funciona: ¿podría reescribir por favor?
@echo off
setlocal enabledelayedexpansion
set FOLDER_PATH=D:/test
for %%f in (%FOLDER_PATH%*) do if %%f neq %~nx0 (
set basename=test
ren *.txt.new !basename!.txt
)
PAUSE
Tengo muchos archivos en la carpeta y necesito iterar a través de cada archivo, solo necesito que la variable del nombre base deba llenarse con el nombre del nombre del archivo anterior en cada iteración.
- Te perdiste un
/
en%FOLDER_PATH%/*
. - Desea cambiar el nombre de los archivos
*.new
, ¿por qué no utilizar este patrón en lugar de*
? Si está interesado en archivos que coinciden con el patrón*.txt.new
, especifique esto en lugar de*
. - No hay necesidad de un
basename
variable; simplemente use%%~nf
para eliminar el (último) sufijo (.new
). - El comando
ren
arroja un error en caso de que el archivo de destino ya exista; ya que desea que se sobrescriba, usemove /Y
lugar. Agregue> nul
para ocultar el resumen1 file(s) moved.
. - Elimine la consulta
if
después de haber resuelto el elemento 2.
Con todo, su script se puede reducir a:
@echo off
set "FOLDER_PATH=D:/test"
rem // Ensure to specify the correct pattern, `*.new` or `*.txt.new`:
for %%f in ("%FOLDER_PATH%/*.txt.new") do (
> nul move /Y "%%~f" "%%~nf"
)
pause
@echo off
setlocal
set FOLDER_PATH=D:/test
for %%f in (%FOLDER_PATH%/*.new) do if "%%~ff" neq "%~f0" (
ECHO move /Y "%%~ff" "%%~dpnf"
)
PAUSE
o
@echo off
setlocal
set FOLDER_PATH=D:/test
for %%f in (%FOLDER_PATH%/*.new) do if "%%~ff" neq "%~f0" (
if exist "%%~dpnf" ECHO del "%%~dpnf"
ECHO rename "%%~ff" "%%~nf"
)
PAUSE
Tenga en cuenta que los comandos de move
operativo ( del
y rename
) son meramente ECHO
ed para la depuración.
También tenga en cuenta que if "%%~ff" neq "%~f0"
se puede omitir iterando *.new
archivos como %~f0
tiene una extensión de .bat
o .cmd
(pruebe echo %~x0 %~f0
).
Recursos (lectura obligatoria):
- (referencia de comando) Un índice AZ de la línea de comandos de Windows CMD
- (particularidades adicionales) Windows CMD Shell Línea de comandos Sintaxis
- (
%~ff
etc. página especial) Argumentos de la línea de comando (parámetros) - (
>
,2>&1
etc. página especial) Redirección