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

Batch file 用于将文件从一个位置复制和重命名到另一个位置的批处理脚本,batch-file,Batch File,我需要批处理脚本每1小时复制一个文件,该文件的名称为file\u name\u YYYY\u MM\u DD\u hh\u MM.csv。该文件存在于Loc1Dir=C:\Users\abcde\Desktop\Practice\u Folder\batch\u rename\locatio中‌​n1 并且必须复制到Loc2Dir=C:\Users\abcde\Desktop\Practice\u Folder\batch\u rename\locatio‌​n2,然后重命名为文件\u name

我需要批处理脚本每1小时复制一个文件,该文件的名称为
file\u name\u YYYY\u MM\u DD\u hh\u MM.csv
。该文件存在于
Loc1Dir=C:\Users\abcde\Desktop\Practice\u Folder\batch\u rename\locatio中‌​n1
并且必须复制到
Loc2Dir=C:\Users\abcde\Desktop\Practice\u Folder\batch\u rename\locatio‌​n2
,然后重命名为
文件\u 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
它工作正常,但它只是将
文件名\u YYYY\u MM\u DD\u hh\u MM.csv中的
-
替换为
文件名YYYY MM DD hh MM.csv

有什么想法吗?

这样可以:

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

如果您只想复制文件_name.*.csv的最后一个版本并去除日期时间戳,则/f
需要两个
,第一个用于获取最新日期,第二个用于去除日期时间戳

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

:: 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"

(“%fname%”中的
For/f“tokens=1-2 delims=“%%f
在下划线处拆分找到的文件名,并仅使用前两个标记作为目标文件名。

1)。如果只想复制一个文件,那么为什么要通过
对/R
进行递归搜索?是否确实要从源的所有子目录复制所有匹配的文件,同时覆盖目标路径中的单个文件?请澄清递归搜索的原因。2). 这就是
%fname:=-%
所做的:用连字符
-
替换下划线
-
,这样得到的结果就不会出乎意料了。问题是你为什么要这样做?除了移除时间戳之外,您还想用
-
替换
\uu
吗?sst,非常感谢您花时间回答我的请求,最后我通过以下方式解决它:SET CCDIR=C:\Users(username)\LocDir1 SET LOADDIR=C:\Users(username)\LocDir2移动%LOADDIR%*票证搜索%CCDIR%ren%CCDIR%*票证搜索.csv我不知道为什么我会变得这么复杂@是的,是的。在MS-DOS及以上版本(包括Windows 10)中。抱歉,看起来不正确。我将很快删除我的评论。但是,根据文件系统的不同,这不一定要最后复制最新的文件。感谢Bernhard提供的有用评论。Lottings,非常感谢您花时间回答我的请求,最后我通过以下方式解决了问题:SET CCDIR=C:\Users(username)\LocDir1 SET LOADDIR=C:\Users(username)\LocDir2 move%LOADDIR%*ticket\u*%CCDIR%ren%CCDIR%*ticket\u*ticket\u search.csv我不知道为什么我会这么复杂!