我需要批处理脚本来仅复制一个文件,每1小时重复一次,该文件的名称为file_name_YYYY_MM_DD_hh_mm.csv
。该文件位于Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location1
中
并且必须复制到Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location2
,然后重命名为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
替换为-
有什么想法吗?
答案 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