2015-04-30 5 views
1

настоящее время у меня этот сценарий я бегу в качестве запланированной задачи:Перевести пакетный скрипт для Powershell скрипт

@echo on 
START /WAIT c:\windows\system32\Robocopy.exe "D:\folder" "\\192.168.2.87\folder" /E /MT:20 /R:50 /W:10 /V /ETA /LOG:c:\robocopy.txt 

Я хочу, чтобы преобразовать и запустить это как сценарий PowerShell из-за двух причин:

  • Его более современная
  • Самая важная причина в том, что я хочу хранить журнал с датой и временем как C:\robocopylog3004201510214043.txt, и я буквально не нахожу никакой информации о том, как стирать символы, такие как «:» и «/» из пакетного скрипта, и я знать По werShell может.

Это последнее число не случайно. Это дата и время.

Дата, например, является "30/04/2015" (чередование он оставит 30042015) Время для примера "10: 21: 40,43" (чередование он оставит 10214043)

Так что это будет оставить имя файла robocopylog3004201510214043.txt

ответ

3

Существует небольшая разница между CMD и PowerShell, когда дело доходит до запуска внешних программ. Я бы рекомендовал использовать оператор вызова (&), хотя, даже если он не является обязательным в данном конкретном случае.

& c:\windows\system32\Robocopy.exe "D:\folder" "\\192.168.2.87\folder" /E /MT:20 /R:50 /W:10 /V /ETA /LOG:c:\robocopy$(Get-Date -format 'ddMMyyyyHHmmss').txt 

robocopy работает синхронно в любом случае, так что не требуется "ждать" инструкции.

number formatddMMyyyyHHmmss производит отметку времени, состоящую из дня, месяца, года, часа, минут и секунд. Я бы не рекомендовал включать миллисекунды, потому что вы, вероятно, не будете запускать robocopy несколько раз за ту же секунду. Если вы должны включить миллисекунды, добавьте ff в строку формата (или f, fff и т. Д., В зависимости от количества цифр, которое вам нужно). Вы можете захотеть использовать формат даты ISO (yyyyMMddHHmmss), хотя это упрощает перечисление файлов журнала в порядке создания.

Что касается замены символов в пакетных сценариев, которые можно сделать с помощью string replacements:

C:\>echo %DATE:/=% 
30042015 

C:\>echo %TIME::=_% 
10_01_22.39
+0

В настоящее время пакетный скрипт возвращает дату «30/04/2015» и «10:21:40, 43" . Поэтому я хочу удалить «/», «:» и «,». Это будет как 3004201510214043. Я добавлю это в исходный вопрос. – riahc3

+0

& c: \ windows \ system32 \ Robocopy.exe "D: \ folder" "\\ 192.168.2.87 \ folder"/E/MT: 20/R: 50/W: 10/V/ETA/LOG: c: \ robocopy $ (Get-Date -format 'ddMMyyyHHmmssfff'). txt – riahc3

+0

Что такое «&» для? – riahc3

Смежные вопросы