batch-file
Manejo de archivos en archivos por lotes
Buscar..
Introducción
En este tema, aprenderá cómo crear, editar, copiar, mover y eliminar archivos en lotes.
Creando un archivo en lote
Puede haber varias razones por las que desea crear un archivo de texto por lotes. Pero cualquiera que sea la razón, así es como lo haces.
Si desea sobrescribir un archivo de texto existente, use >
. Ejemplo:
@echo off
echo info to save > text.txt
Pero si desea agregar texto a un archivo de texto ya existente, use >>
. Ejemplo:
@echo off
echo info to save >> text.txt
Si necesita guardar varias líneas de texto en un archivo use ()>text.txt
Ejemplo:
@echo off
(echo username
echo password)>text.txt
Cómo copiar archivos en lote
Es posible que desee copiar archivos de un lugar a otro. En este ejemplo te enseñaremos.
Puedes usar el comando xcopy
. La sintaxis es xcopy c:\From C:\To
Ejemplo:
@echo off
xcopy C:\Folder\text.txt C:\User\Username\Desktop
También hay interruptores que puede utilizar. Si desea verlos, abra el símbolo del sistema mediante Start Menu -> Accessories -> Command Prompt
y luego escriba xcopy /?
Mover archivos
Usando el comando mover, puedes mover archivos:
@echo off
cd C:\Foo\Bat\Baz
move /Y Meow.bat "Meow Folder" >nul
Meow.bat
representa qué archivo mover. La "Carpeta Meow" mueve Meow.bat
a la Meow Folder
. /Y
dice no pedir confirmación. Reemplazando eso con /-Y
hace que el archivo por lotes solicite confirmación. El >nul
oculta la salida del comando. Si no tuviera >nul
, generaría:
1 File Moved
Borrando archivos
Usando el comando DEL
(alias para ERASE
), uno puede eliminar archivos.
@echo off
del foo.ext
Este comando eliminará foo.ext
del directorio actual. También se puede especificar la ruta y el archivo, como:
del C:\Foo\Bar\Baz.ext
Pero siempre es ideal poner comillas ( "
) alrededor de las rutas, vea aquí la razón.
Hay algunas banderas disponibles para DEL
.
Bandera | Función |
---|---|
/P | Solicita al usuario antes de eliminar el (los) archivo (s) |
/F | Eliminar forzosamente los archivos de solo lectura |
/S | Eliminar archivo (s) en subdirectorios |
/Q | Previene el aviso del usuario |
/A | Filtro: Sólo eliminar archivo atribuido específico, |
usando el - carácter significa no atribuido como ese tipo. |
Copiar archivos sin xcopy
En este ejemplo , el usuario BoeNoe mostró cómo usar el comando xcopy
para copiar archivos. También hay un comando adicional llamado copy
.
Aquí hay un ejemplo simple:
copy foo.ext bar.ext
Esto copia foo.ext
a bar.ext
, y crea bar.ext
cuando no existe. También podemos especificar rutas al archivo, pero siempre es ideal colocar comillas ( "
) alrededor de las rutas, consulte aquí el motivo.
También hay muchas banderas disponibles para copy
, ver copy /?
o help copy
en un símbolo del sistema para ver más.
Edición de la línea n de un archivo
El archivo por lotes no viene con un método incorporado para reemplazar la línea n
de un archivo, excepto replace
y append
( >
y >>
). Usando for
bucles, podemos emular este tipo de función.
@echo off
set file=new2.txt
call :replaceLine "%file%" 3 "stringResult"
type "%file%"
pause
exit /b
:replaceLine <fileName> <changeLine> <stringResult>
setlocal enableDelayedExpansion
set /a lineCount=%~2-1
for /f %%G in (%~1) do (
if !lineCount! equ 0 pause & goto :changeLine
echo %%G>>temp.txt
set /a lineCount-=1
)
:changeLine
echo %~3>>temp.txt
for /f "skip=%~2" %%G in (%~1) do (
echo %%G>>temp.txt
)
type temp.txt>%~1
del /f /q temp.txt
endlocal
exit /b
La secuencia de comandos principal llama a la función
replaceLine
, con el nombre de archivo / la línea a cambiar / y la cadena a reemplazar.La función recibe la entrada.
- Se realiza un bucle a través de todas las líneas y
echo
a un archivo temporal antes de la línea de reemplazo - Se hace
echo
la línea de reemplazo del archivo. - Continúa la salida al resto del archivo.
- Copia el archivo temporal al archivo original.
- Y elimina el archivo temporal.
- Se realiza un bucle a través de todas las líneas y
La secuencia de comandos principal recupera el control y
type
el resultado.