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! 中的時間戳!價值。但是當我回顯!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
.