Windows批处理文件备份文件

时间:2014-08-22 20:40:38

标签: batch-file backup

我是编写Windows批处理脚本的新手。我正在尝试创建一个批处理文件,该文件从CSV文件&中读取Filename和SourcePath。将文件复制到目标路径。目标路径是部分固定的,其中一部分来自源路径。如果我在CSV中也指定了目标路径但我想从源路径值中获取它,我能够这样做。

输入文件中的一行如下所示:

filename,C:\parent_dir\,path

这是我到目前为止所尝试过的。

SET backup_dir=C:\backup_dir\
FOR /F "tokens=1-3* delims=," %%A IN (list.csv) DO (
SET dest_dir="%backup_dir%%%C"
xcopy %%B%%C%%A %dest_dir% /e
PAUSE
)
PAUSE

这会从父目录中正确读取文件,但不会将其复制到dest目录。而是将文件复制到批处理文件所在的位置。我还必须为正在备份的文件添加时间戳。我可以使用这个来获取时间戳值:

SET TIMESTAMP=%DATE:~-4,4%_%DATE:~-7,2%_%DATE:~-10,2%_%TIME:~-11,2%.%TIME:~-8,2%

但在扩展程序无效之前将其添加到文件名中。 {我希望将文件名从file.extn更改为file_timestamp.extn。文件的扩展名可能不同,因此我无法对其进行硬编码。

在此感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我已准备好以下脚本,这会将源目录下的文件复制到目标目录(此信息存储在输入文件input.txt中)

for /f "skip=1 tokens=1,2 delims=," %%i in (input.txt) do CALL :DATACOPY "%%i" "%%j"
goto :eof

:DATACOPY "%%i" "%%j"
set source=%1
set dest=%2

for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do set TS=%%x

set yyyy=%TS:~0,4%
set mm=%TS:~4,2%
set dd=%TS:~6,2%
set hh=%TS:~8,2%
set min=%TS:~10,2%
set timestamp=%dd%-%mm%-%yyyy%_%hh%-%min%

robocopy  /TEE /S /E /TEE %source% %dest%_%timestamp%

:eof

示例输入文件

source,destination
c:\source1\data,d:\dest1\data
c:\source1\data,d:\dest2\data

干杯,G

答案 1 :(得分:0)

两个问题:
 1.您设置backup_dir,但在循环中使用dest_dir 2.批处理脚本在块启动之前提前替换变量。 这意味着xcopy中的%dest_dir%将固定为第一个值。要解决这个问题,请使用setlocal enabledelayedexpansion,然后使用"!"围绕变量。而不是"%"

摆弄%% A的名称和扩展名之间的时间戳:%%~nA!timestamp!%%~xA

把它放在一起(未经测试):

setlocal enabledelayedexpansion
SET backup_dir=C:\backup_dir\
FOR /F "tokens=1-3* delims=," %%A IN (list.csv) DO (
SET dest_dir="%backup_dir%%%C"
SET TIMESTAMP=%DATE:~-4,4%_%DATE:~-7,2%_%DATE:~-10,2%_%TIME:~-11,2%.%TIME:~-8,2%
xcopy %%B%%C%%~nA!timestamp!%%~xA !dest_dir! /e
PAUSE
)
PAUSE

答案 2 :(得分:0)

setlocal enabledelayedexpansion
SET BACKUP_DIR=C:\backup_dir\
SET TIMESTAMP=%DATE:~-4,4%_%DATE:~-7,2%_%DATE:~-10,2%_%TIME:~-11,2%.%TIME:~-8,2%
FOR /F "tokens=1-3* delims=," %%A IN (list.csv) DO (
SET DEST_DIR="%BACKUP_DIR%%%C"
echo f | xcopy /f /y %%B%%C%%A !dest_dir!%%~nA_!TIMESTAMP!%%~xA 
)
PAUSE