检查时间并根据小时执行不同的检查

时间:2013-01-31 16:16:00

标签: powershell if-statement scripting batch-file

我在Windows Server 2003服务器上使用Robocopy命令将一系列EDB文件从用户工作站复制到服务器上的特殊文件夹。我想两次运行robocopy命令,一次是在上午中午,一次是在下午。

我知道如何执行此操作的方法是编写两个独立的批处理文件,这些文件计划在不同的时间运行。每批都会将EDB复制到不同的目录。

但是我发现我应该可以通过以下方式在一个批处理文件中执行此操作:

  1. 检查当前时间。
  2. 请注意是在1200pm之前还是在1200pm之后。
  3. 如果是在1200pm之前,请运行这组Robocopy命令。
  4. 如果是在晚上12点之后,请运行另一组Robocopy命令。
  5. 我将使用两个批处理文件以我知道如何操作的方式实现它。我想学习如何以其他方式做到这一点。我愿意以任何方式做到这一点 - Powershell,Python等。不可否认,我很想在这个生产服务器上安装任何我通常不需要安装的东西。例如,我可能安装Python,但它只适用于这项工作,这看起来有点像矫枉过正。 (随意消耗我!)

3 个答案:

答案 0 :(得分:4)

可能有几种方法可以满足您的要求。第一部分,根据一天中的时间运行不同的代码非常简单。只需使用:

if ( (Get-Date -UFormat %p) -eq "AM" ) {
    <Code if doing before noon> 
    } #End if
else {
    <code if doing after noon>
    } #end else

您可以在Powershell中运行robocopy命令而不需要任何花哨的技巧。 Here is a link to a question about robocopy.
在安排任务时,this link将向您展示如何使用任务调度程序安排powershell脚本 要获得其他任何东西,你将不得不做一些试验和错误,然后回来失败或障碍以获得更多帮助。

答案 1 :(得分:3)

另一种可能性:

Switch ((get-date).tostring('tt')) 
 {
   'AM' {'Morning script'}
   'PM' {'Afternoon script'}
 }

答案 2 :(得分:2)

你可以使用这样的东西

set t=%time:0,2%
if %t% lss 12 (
REM First set of robocopy commands here
) else (
REM Second set of robocopy commands here
)