早安,艾尔
我有以下批处理脚本,它循环遍历包含 .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
。