Batch file 如何对批处理文件进行编码以复制和重命名最近更新的文件?

Batch file 如何对批处理文件进行编码以复制和重命名最近更新的文件?,batch-file,Batch File,我正在尝试编写一个批处理文件代码,以便只将给定文件夹中最近更新的文件复制到本地计算机上的另一个目录,同时按原样重命名它 我在这里发现了一个非常类似的问题 并且还从其他论坛拼凑了下面的代码,但是遇到了麻烦,因为这只会导致批处理文件本身被复制到目标文件夹。批处理文件本身的位置对我来说并不重要 源文件夹是C:!批处理,目标文件夹为C:\DROP 代码如下,如果这是一个显而易见的答案,我深表歉意,但这确实是我第一次尝试编写批处理文件。。。谢谢 @echo off setLocal EnableDel

我正在尝试编写一个批处理文件代码,以便只将给定文件夹中最近更新的文件复制到本地计算机上的另一个目录,同时按原样重命名它

我在这里发现了一个非常类似的问题

并且还从其他论坛拼凑了下面的代码,但是遇到了麻烦,因为这只会导致批处理文件本身被复制到目标文件夹。批处理文件本身的位置对我来说并不重要

源文件夹是C:!批处理,目标文件夹为C:\DROP

代码如下,如果这是一个显而易见的答案,我深表歉意,但这确实是我第一次尝试编写批处理文件。。。谢谢

@echo off

setLocal EnableDelayedExpansion

pushd C:\! BATCH

for /f "tokens=* delims= " %%G in ('dir/b/od') do (set newest=%%G)

copy "!newest!" C:\DROP\

PAUSE

尝试将
pushd
命令移动到
setLocal
命令上方

我猜“!”字符对于延迟扩展有特殊的含义,因此在启用延迟扩展后,您可能无法将其用作路径名的一部分


如果您不需要感叹号,也可以从路径中删除感叹号,这可能会更简单。

我认为这个小mod可以让您的脚本执行您想要的操作

 @echo on
 setLocal DisableDelayedExpansion
 pushd "C:\! BATCH"
 setLocal EnableDelayedExpansion

 for /f "tokens=* delims= " %%G in ('dir/b/od') do (set newest=%%G)

 copy %newest% C:\DROP\newname.txt

 PAUSE
 POPD

newname.txt。。。是新名字吗:)

非常感谢,很有效!尽管唯一的问题是,当文件移动时,它不会重命名文件。不幸的是,由于篇幅太长,无法在这里讨论,源目录将需要保留“!”以它的名义。关于如何让脚本同时重命名文件的任何其他想法都将非常感谢!另一个最近发布的答案是使用copy命令重命名文件的好方法。belisarius还有一个很好的观点,您应该在调用pushd之前显式禁用延迟扩展,以防您的脚本在已经启用延迟扩展的情况下被调用。这太棒了,它可以完美地工作!非常感谢你们两位!每个
setlocal
都会将一个新帧推送到环境堆栈上,后面应该跟着一个相应的
endlocal
,以清理该堆栈。大多数人并不在意,只是在脚本末尾让框架泄漏,但这是需要注意的。