Назад | Перейти на главную страницу

Пакетный сценарий работает в 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. Когда я повторяю переменную filedate в Win7, я получаю временную метку, сохраненную в! FileDate! стоимость. Но когда я повторяю! FileDate! в Windows Server 2008 он возвращает: 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

Я согласен с комментарием MDMarra об использовании Powershell.

Мы в 2014 году и ваша платформа - Windows 2008 Server ... поэтому я настоятельно рекомендую вам считать пакетную обработку немного "устаревшей" ...

Используя 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.