批处理脚本适用于 Windows 7,但不适用于 Windows Server 2008

批处理脚本适用于 Windows 7,但不适用于 Windows Server 2008

早安,艾尔

我有以下批处理脚本,它循环遍历包含 .sql 文件的文件夹。当它找到带有今天日期时间戳的 .sql 文件时,它会将该文件复制到新目录。

@echo off
setlocal enableextensions enabledelayedexpansion

set "currentDate=%date:~0,10%"
    for %%g in ("c:\mfa\*.sql") do (
     set "fileDate=%%~tg"
     set "fileDate=!fileDate:~0,10!"
     if "!fileDate!"=="%currentDate%" (
        copy "%%~fg" "c:\newLocation"
     )
    )

我的问题:

这在 Windows 7 上效果很好,但在 Windows Server 2008 上却不行。当我在 Win7 上回显 filedate 变量时,它会给我保存在 !fileDate! 值中的时间戳。但是当我在 Windows Server 2008 中回显 !fileDate! 时,它返回:ECHO 已关闭。

即使我删除了 delayedexpansion,这仍然不起作用。

为什么它不能在 Server 2008 上运行?

==================== 更新 -

Powershell 错误

The term 'test.ps1' is not recognized as the name of a cmdlet, function, script file, or operable pro
elling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:9
+ test.ps1 <<<<
    + CategoryInfo          : ObjectNotFound: (test.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

答案1

我同意 MDMarra 关于使用 Powershell 的评论。

2014年您的平台是 Windows 2008 Server...所以我强烈建议您认为 Batch 有点“过时”...

使用 Powershell,如下所示:

$today=Get-Date -format d
$files=Get-ChildItem "C:\mfa" -Filter *.sql
foreach ($file in $files)
{
  $filename=$file.FullName
  $dateCreated=$file.CreationTime | Get-Date -format d
  $dateModified=$file.LastWriteTime | Get-Date -format d
  write-output "Today is : $today"
  write-output "Scanning file : $filename"
  write-output "Modified : $dateModified"
  write-output "Created : $dateCreated"
  if($dateCreated -eq $today)
  {
    copy-item $filename c:\newLocation
  }
  write-output "---------------------------------------------"
}

假设比较创建日期。要与上次修改日期进行比较,请使用LastWriteTime而不是CreationTime

相关内容