Я запускаю программу, которая создает 50 отчетов для разных клиентов в формате pdf первого числа каждого месяца. Мне нужно, чтобы имя файла отражало предыдущий месяц и текущий год в имени файла, т.е. 2014_09_ASI.pdf. В настоящее время я переименовываю отчеты с датой после их создания с использованием командного файла. Но я могу только получить пакетный файл, чтобы использовать текущий месяц, и не возвращать имя на месяц назад. Любая идея, если я могу сделать это с PowerShell?
2 ответа
Командлеты Get-Date в PowerShell позволяют преобразовывать математические и типизированные тексты в строки, которые вы можете легко использовать в своих интересах.
Чтобы получить в прошлом месяце:
(get-date).month - 1
Чтобы получить строку месяц назад:
[string]((get-date).month - 1) + "_" + (get-date).Day
Таким образом, чтобы имя файла в формате: Year_LastMonth # _ASI.pdf:
$LastMonth = (Get-Date).Month - 1
$year = (get-date).year
$newFileName = "$lastMonth $year ASI.pdf" -replace ' ', '_'
Вы также можете использовать расширение переменных, чтобы сделать то же самое, или даже в виде одной строки, если вы действительно этого хотите, но в зависимости от версии PS, я обнаружил, что расширение переменной немного непредсказуемо ... Поэтому я использовал пробелы, чтобы обеспечить точное расширение, а затем заменил «» в новой переменной на "_".
Запустите отчет и сценарий в 23:59. Это позволит вам переименовать файлы с указанием текущего года и месяца, предполагая, что весь процесс может быть запущен до истечения минуты.
Вот некоторые другие решения о том, как выполнять то, что вы хотите, как PowerShell или Batch.