Vbscript 批处理或VB脚本将日志从多个目录复制到一个目录并重命名以避免冲突

Vbscript 批处理或VB脚本将日志从多个目录复制到一个目录并重命名以避免冲突,vbscript,batch-file,Vbscript,Batch File,希望你能帮忙。我已经试着解决这个问题一周了,但没有取得任何进展,也不能完全拼凑出我需要的东西我的脚本技巧还远远不够好,所以请原谅我的天真! 好的,问题 我有一个IIS服务器,它有多个站点,所有站点都将其日志保存在一个单独的目录中,我需要将过去24小时的日志复制到我机器上的本地目录中,以便每天在日志解析器Lizard(GUI版本)中分析这些日志。 我可以通过硬件VPN将一个驱动器从远程服务器映射到本地机器,这样事情就容易多了。使用forfiles命令,我可以重新诅咒目录以查找只有一天的日志,使用c

希望你能帮忙。我已经试着解决这个问题一周了,但没有取得任何进展,也不能完全拼凑出我需要的东西我的脚本技巧还远远不够好,所以请原谅我的天真! 好的,问题 我有一个IIS服务器,它有多个站点,所有站点都将其日志保存在一个单独的目录中,我需要将过去24小时的日志复制到我机器上的本地目录中,以便每天在日志解析器Lizard(GUI版本)中分析这些日志。 我可以通过硬件VPN将一个驱动器从远程服务器映射到本地机器,这样事情就容易多了。使用forfiles命令,我可以重新诅咒目录以查找只有一天的日志,使用copy/xcopy/或Robocopy,我可以将命令设置为copy。我的问题是,IIS日志都具有相同的名称,因此我的copy命令只是不断覆盖以前的文件,而不是创建新文件。我尝试使用%random%参数作为文件名,但这会再次创建一个随机文件,并被下一个文件覆盖,保持相同的名称,而不是在一个目录中创建大量随机命名的文件。 我知道日志解析器命令包括recurse,我已经成功地使用了它,但是日志的格式略有改变,GUI蜥蜴无法读取其中的数据,因此这不是一个解决方案。 我现在的代码如下所示,由于明显的原因IP发生了变化。任何帮助都将不胜感激

@回音

净使用Q:/Delete/yes

NET使用Q:\255.255.255.255\D$\Logs

cd C:

RD/S/Q C:\Weblogs\Production

MD C:\Weblogs\Production

forfiles.exe/p Q:\/s/m*.log/d 0/c“cmd/c robocy/s/XC/XN/XO@file c:\Weblogs\Production\%random%.log”

NET使用Q:/delete


在这种情况下,exit

%RANDOM%
对您不起作用,因为它不会在每次迭代中得到解决,而只能在forfiles调用时得到一次

您需要在
for files
中使用一些唯一标识符,如果只有一级深度递归,可能需要将
@RELPATH
@FNAME
串联起来

或者将
FORFILES
替换为
FOR
循环。在循环中,您可以更自由地计算唯一的ID,也许一个简单的计数器可以为您工作

编辑:查看这个简单的代码示例,开始学习

@ECHO off
SETLOCAL enabledelayedexpansion
SET destdir=C:\LOGS
SET count=%RANDOM%
FOR /R %%A IN (*.log) DO (
  SET /A count += 1
  @ECHO COPY %%A !destdir!\%%~nA.!count!.log
)

谢谢你的回复我看到了FOR命令,并认为这可能更合适,但我仍在为如何编写脚本而挣扎我是否也使用FOR命令来递归目录,查找日期范围内的文件以及重命名它们。我试图从网上获得更多的信息,但我很挣扎;对代币和熟食有点困惑如有任何进一步的澄清或示例,我们将不胜感激。您尝试过什么?你有什么问题?只是一个让你开始的提示
对于(*.log)中的/R%%A,请执行@ECHO%%A%%~tA
查看我对答案的编辑。再次感谢您的帮助!-我知道回复有点晚,但这份工作被搁置了一段时间,我刚刚开始重新审视它。现在,我已经根据您提供的脚本获得了一个有效的解决方案。