Пакетный скрипт, который может обновить файл с диапазоном дат - PullRequest
2 голосов
/ 06 февраля 2011

Мне нужна помощь в изменении диапазона дат в строке 13 файла:

01/01/201101/31/2011

Я планирую настроить запуск сценария каждый день из планировщика Windows.

Я бы хотелкак сценарий для изменения начальной даты -15 дней от текущей даты и конечной даты +15 дней от текущей даты.

Я нашел DateAdd.cmd, написанный Робом ван дер Вудом (http://www.robvanderwoude.com), но яя не уверен, как передать значения обратно в мой основной (вызывающий) скрипт?

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

Без какой-либо помощи, я сделал в C # следующее:

  static void Main(string[] args)
  {
     string inputFile = Path.Combine("C:/temp","textfile.txt");
     string outputFile = Path.Combine("C:/temp","textfile2.txt");


     using(StreamReader input = File.OpenText(inputFile))
     using(Stream output = File.OpenWrite(outputFile))
     using(StreamWriter writer = new StreamWriter(output))
     {
        int count = 1;
        while(!input.EndOfStream)
        {
           // read line 
           string line = input.ReadLine();
           // Get dates 15 days on either side of current date 
           if(count == 13)
           {
              DateTime beginRange = DateTime.Today.AddDays(-15);
              DateTime endRange = DateTime.Today.AddDays( 15 );
              string strBeginDate = beginRange.ToShortDateString();
              string strEndDate = endRange.ToShortDateString();

              // replace line with new date range
              line = "0001" + strBeginDate + strEndDate + "Report submitted by";
           }
           // increment counter
           count++;

           // write the file to temp file 
           writer.WriteLine(line);
        }
     }
     File.Delete(inputFile); // delete original file 
     File.Move(outputFile,inputFile); // rename temp file to original file name 
0 голосов
/ 07 февраля 2011

Я нашел DateAdd.cmd, написанный Робом ван дер Вудом (http://www.robvanderwoude.com)), но я не уверен, как передать значения обратно в мой основной (вызывающий) скрипт?

Я согласен с другими, что вам лучше использовать другой язык сценариев (VBS, PowerShell, ...), но чтобы ответить на этот конкретный вопрос, пакетный файл DateAdd.cmd устанавливает переменную среды DATEADD в результате своих обсуждений..

Вы можете сделать что-то вроде:

CALL DATEADD -15 >NUL:
SET FROMDATE=%DATEADD%
CALL DATEADD 15 >NUL:
SET TODATE=%DATEADD%
echo %FROMDATE%%TODATE%

Обратите внимание, что DateAdd.cmd использует формат краткой даты текущего пользователя из реестра, поэтому будет давать разные результаты в зависимости от языкового стандарта пользователя. ** 1011

0 голосов
/ 06 февраля 2011

Язык пакетных файлов не был значительно обновлен десятилетиями.Вы все еще не можете сделать обычный цикл for.Я предлагаю изучить PowerShell .Он такой же мощный (если не больше), как языки оболочки * nix, но может также использовать всю платформу .NET.Если вы используете PowerShell, эта проблема будет такой простой, как

  1. Открыть файл, перейти к строке 13
  2. Разобрать строку как две даты
  3. Вычесть 15 дней изодин объект даты и добавьте 15 к следующему
  4. Записать файл обратно

Тот факт, что вы пытаетесь выполнять реальное программирование в пакетном файле, поистине благороден (я хотел бысовершил Сеппуку ).Попробуйте переключиться на более мощный язык оболочки, который более функциональный.Кроме того, PowerShell - это будущее сценариев Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...