1

Я запускаю программу, которая создает 50 отчетов для разных клиентов в формате pdf первого числа каждого месяца. Мне нужно, чтобы имя файла отражало предыдущий месяц и текущий год в имени файла, т.е. 2014_09_ASI.pdf. В настоящее время я переименовываю отчеты с датой после их создания с использованием командного файла. Но я могу только получить пакетный файл, чтобы использовать текущий месяц, и не возвращать имя на месяц назад. Любая идея, если я могу сделать это с PowerShell?

2 ответа2

1

Командлеты 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, я обнаружил, что расширение переменной немного непредсказуемо ... Поэтому я использовал пробелы, чтобы обеспечить точное расширение, а затем заменил «» в новой переменной на "_".

1

Запустите отчет и сценарий в 23:59. Это позволит вам переименовать файлы с указанием текущего года и месяца, предполагая, что весь процесс может быть запущен до истечения минуты.

Вот некоторые другие решения о том, как выполнять то, что вы хотите, как PowerShell или Batch.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .