用于将文件从一个位置复制和重命名到另一个位置的批处理脚本

时间:2018-09-18 03:24:59

标签: batch-file

我需要批处理脚本来仅复制一个文件,每1小时重复一次,该文件的名称为file_name_YYYY_MM_DD_hh_mm.csv。该文件位于Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1中 并且必须复制到Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2,然后重命名为file_name.csv(删除时间戳记)。每当文件复制到Loc2Dir时,我都需要覆盖此文件。

我当前正在使用此脚本:

@ECHO ON

SET Loc1Dir=C:\Users\fgutierrez\Downloads
SET Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck

CD /D "%Loc1Dir%" 
FOR /R %%F IN ("*_*.csv") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF 

:copyFile
SET copyfname=%~1
SET fname=%~2 
SET fname=%fname:_=-%
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF

工作正常,但只需将_中的file_name_YYYY_MM_DD_hh_mm.csv替换为-

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您只想复制file_name _ *。csv的最后一个版本并剥离日期时间戳,则需要两个for /f,第一个用于获取最新的日期,第二个用于剥离。

选择file_name作为占位符可能是不明智的。假设您的真实姓名之间也有下划线:

:: Q:\Test\2018\09\18\SO_52378446.cmd
@ECHO ON
SET "Loc1Dir=C:\Users\fgutierrez\Downloads"
SET "Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck"

SET "FileName=file_name_*_*_*_*_*.csv"
SET "fname="

CD /D "%Loc1Dir%" 
FOR /F "delims=" %%F IN ('Dir /B/O:N "%FileName%"') DO Set "fname=%%~nxF"
If defined fname For /f "tokens=1-2 delims=_" %%F in ("%fname%"
    ) DO Echo F|XCOPY /Y /F "%fname%" "%Loc2Dir%\%%F_%%G.csv"

For /f "tokens=1-2 delims=_" %%F in ("%fname%"在下划线处分割找到的文件名,并仅将前两个标记用作目标文件名。

答案 1 :(得分:-1)

这将起作用:

@ECHO ON
SET Loc1Dir=C:\Users\fgutierrez\Downloads
SET Loc2Dir=C:\Users\fgutierrez\Desktop\CrossCheck
copy %Loc1Dir%\file_name*.csv %Loc2Dir%\file_name.csv