Windows-Server-2008

批處理腳本適用於 Windows 7,但不適用於 Windows Server 2008

  • February 4, 2014

美好的一天

我有以下批處理腳本循環遍歷包含 .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! 中的時間戳!價值。但是當我回顯!fileDate!在 Windows Server 2008 中,它返回:ECHO 已關閉。

即使我刪除了延遲擴展,這仍然不起作用。

為什麼它不能在 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

我同意 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.

引用自:https://serverfault.com/questions/571806