Вопрос: Как создать папку с именем, основанным на текущей дате в Powershell? Как создать папку в powershell


powershell - Переименование папки и создание новой папки в PowerShell

Выдает ошибку: Missing an argument for parameter 'ItemType'. Specify a parameter of type 'System.String' and try again. Missing an argument for parameter 'ItemType'. Specify a parameter of type 'System.String' and try again.

Как указывает полезный ответ Deadly-Bagel, вы пропускаете аргумент -ItemType и вместо этого следуете ему с другим параметром -Type, который, по сути, является псевдонимом для -ItemType - поэтому удаление либо -ItemType или -Type.

Чтобы найти псевдонимы параметров, используйте что-то вроде (Get-Command New-Item).Parameters['ItemType'].Aliases

Переименовывает мою последнюю папку в _MM-dd-yyyy, но мне нужен latest_MM-dd-yyyy.

  • Вы добавляете строку даты непосредственно в $localPath, у которой есть trailing \, поэтому $newPath выглядит примерно так 'c:\example\latest\_02-08-2017', что не является целью.

  • Обеспечение того, что $localPath имеет $localPath \ исправляет проблему, но обратите внимание, что Rename-Item обычно принимает имя файла/каталога как аргумент -NewName, а не полный путь; вы можете только уйти с полным путем, если его родительский путь совпадает с элементом ввода - другими словами, вы можете указать только путь, если это не приведет к другому месту для переименованного элемента (вам понадобится Командлет Move-Item для достижения этого).

    • Split-Path -Leaf $localPath предлагает удобный способ извлечения последнего компонента пути, имеет ли входной путь конечный \. В этом случае: latest

    • Альтернативно, $localPath -replace '\\$' всегда возвращает путь без конечного \. В этом случае: c:\example\latest

Если мы разделим все это:

param ( $localPath = "c:\example\latest\" #"# generally, consider NOT using a trailing \ ) # Rename preexisting directory, if present. if (Test-Path $localPath) { # Determine the new name: the name of the input dir followed by "_" and a date string. # Note the use of a single interpolated string ("...") with 2 embedded subexpressions, # $(...) $newName="$(Split-Path -Leaf $localPath)_$((Get-Date).AddDays(-1).ToString('MM-dd-yyyy'))" Rename-Item -Path $localPath -newName $newName } # Recreate the directory ($null = ... suppresses the output). $null = New-Item -ItemType Directory -Force -Path $localPath

Обратите внимание: если вы запустите этот скрипт несколько раз в тот же день, вы получите сообщение об ошибке переименования (которое можно было бы легко обработать).

qaru.site

powershell - Как выбрать файлы в папке на основе части имени файла и закрепить их в Powershell?

Я новичок в Powershell (используя Powershell 2.0 btw) и пытаюсь создать скрипт, который выполняет несколько действий (это мой третий скрипт или так). У меня есть большинство вещей, но последнее, что осталось, - группировать файлы разных типов (xml, tfw и tif) в папке на основе первой части имени файла (первые три символа), а затем закрепить эти файлы на несколько zip файлы с именем, как первые 3 символа, либо в том же месте, либо в новом.

Пример содержимого папки:

001.tif 001.tfw 001.metadata.xml 002.tif 002.tfw 002.metadata.xml 003.tif 003.tfw 003.metadata.xml 003_svel.tif 003_svel.tfw 003_svel.metadata.xml

Требуемый результат:

001.zip containing 001.tif, 001.tfw, 001.metadata.xml 002.zip containing 002.tif, 002.tfw, 002.metadata.xml 003.zip containing 003.tif, 003.tfw, 003.metadata.xml, 003_svel.tif, 003_svel.tfw and 003_svel.metadata.xml

Я установил 7-zip, чтобы сделать zipping, и я использую версию командной строки. Я использовал 7-zip local на некоторых тестовых файлах и получил его на работу, но тогда это были только tif файлы. У меня есть исходная папка, где я ищу самую последнюю созданную папку, а затем обрабатываю файлы в ней. Это то, что я до сих пор (Powershell 2.0):

$dir_source = "c:\Test" $new_folder = Get-ChildItem $dir_source -Recurse | Where { $_.PSIsContainer} | Sort-Object LastWriteTime -Descending | Select-Object -ExpandProperty Fullname <-First 1 Get-ChildItem $new_folder -recurse -Exclude metafile.xml | Group-Object {$_.Name.Substring(0,3)}

Это дает мне список сгруппированных файлов в созданной папке, основанной на первых трех символах в имени файла. Он также показывает, какие файлы находятся в каждой группе. Как показано ниже:

Count Name Group ----- ---- ----- 3 003 {C:\Test\20150708 063255_B\003.metafile.xml, C:\Test\20150708 063255_B\003.tfw, C:\Test\20150708 063255_B\003.tif} 6 004 {C:\Test\20150708 063255_B\004.metafile.xml, C:\Test\20150708 063255_B\004.tfw, C:\Test\20150708 063255_B\004.tif, C:\Test... 6 009 {C:\Test\20150708 063255_B\009.metafile.xml, C:\Test\20150708 063255_B\009.tfw, C:\Test\20150708 063255_B\009.tif, C:\Test...

Теперь мой следующий шаг состоит в том, чтобы взять эти группы и закрепить их. В идеале создайте эти zip файлы в другом целевом каталоге (я считаю, что могу изменить это при установке переменной $directory- в приведенном ниже скрипте.)

foreach ($group in $dataset) { $name = $file.name $directory = $file.DirectoryName $zipFile = $file.Name + ".zip" sz a -t7z "$directory\$zipfile" "$directory\$name"

Этот последний код вызывает некоторые проблемы. Я либо получаю сообщение:

7-Zip (A) 9.20 Copyright (c) 1999-2010 Игорь Павлов 2010-11-18 Ошибка: c:\Test\Dest_test460.zip не поддерживается архив Системная ошибка: некорректная функция.

,или

ВНИМАНИЕ: Не удается найти 1 файл 7-Zip (A) 9.20 Copyright (c) 1999-2010 Игорь Павлов 2010-11-18 Сканирование \460: ВНИМАНИЕ: Система не может найти указанный файл.

или он запускает все файлы в моем профиле пользователя в zip файл. В зависимости от изменений я делаю это с $ group-value. Я считаю, что в моем сценарии есть одна или несколько базовых ошибок, и именно здесь я прошу о помощи. Может быть, я приближаюсь к этому неправильно, сначала группируя файлы, которые я хочу, а затем пытаюсь их застегнуть?

Любой, кто может увидеть мою ошибку или дать мне некоторый намек на то, что я должен сделать?

Спасибо за ваше время!

qaru.site

Как создать папку с именем, основанным на текущей дате в Powershell?

У меня около 50 xml-файлов, которые генерируются каждый раз, когда я запускаю определенную логику. Теперь я хочу, чтобы эти 50 файлов хранились в определенной папке с датой. Независимо от того, сколько раз я запускаю эту логику для одной конкретной даты, файлы xml должны быть перезаписаны только для этой конкретной даты (на основе hhmmss). Просто: Как создать папку с именем, основанным на текущей дате, и хранить в ней файлы xml в зависимости от даты?

Например: есть 3 файла xml file_1.xml, file_2.xml и file_3.xml

Теперь я хочу, чтобы папка создавалась в формате -

**xml_yyyymmdd_hhmmss**

который разместил бы все xml-файлы в них.

For Eg: Xml_20121029_180912

будет папка, созданная для сегодняшней даты. И все 3 xml-файла будут сохранены в этом на сегодня.

На завтра имя папки будет:

Xml_20121030_170912

Мой код выглядит следующим образом:

$location = New-Item -Path . -ItemType Directory -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)") $rptdir = "C:\Test" $ rptdir = ($rptdir + '\' + $location.Name) $outputFile= "$rptdir\File_2.xml" $row = "\\shared\Data\DevSB\CS\appSomeSystem.dll" & /f:$row /o:$outputFile

Ошибка вывода : Не удалось найти часть пути «C: \ test \ XML_29_10_2012_091717 \ File2.xml.

вопрос  здесь - папка XML_29_10_2012_091717 создана с файлом2.xml в ней, но не внутри C: \ Test, но где скрипт.

Мне нужен XML_29_10_2012_091717, который будет создан в C: \ test с File2.xml внутри него.

Окружающая среда : Win Xp Professional.

Любая помощь будет принята с благодарностью.

благодаря

Попробуй это:

New-Item -Path . -ItemType Directory -Name ("XML_$(Get-Date -f ddMMyyyy_hhmmss)")

Редактировать после комментариев:

попробуйте изменить это:

$location = New-Item -Path c:\test -ItemType Directory -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)") $outputFile= "$($location.fullname)\File_2.xml"

Полная версия:

New-Item -Path . -ItemType Directory -Name (Get-Date -f dd_MM_yyyy)

Вы также можете использовать md или mkdir

md (Get-Date -f dd_MM_yyyy) $location = New-Item -Path $rptdir -ItemType Directory **-force** -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)")

Как насчет добавления команды -force cmd-let здесь?

programmerz.ru

Как создать папку с именем, основанным на текущей дате в Powershell?

У меня около 50 xml-файлов, которые генерируются каждый раз, когда я запускаю определенную логику. Теперь я хочу, чтобы эти 50 файлов хранились в определенной папке с датой. Независимо от того, сколько раз я запускаю эту логику для одной конкретной даты, файлы xml должны быть перезаписаны только для этой конкретной даты (на основе hhmmss). Просто: Как создать папку с именем, основанным на текущей дате, и хранить в ней файлы xml в зависимости от даты?

Например: есть 3 файла xml file_1.xml, file_2.xml и file_3.xml

Теперь я хочу, чтобы папка создавалась в формате -

**xml_yyyymmdd_hhmmss**

который разместил бы все xml-файлы в них.

For Eg: Xml_20121029_180912

будет папка, созданная для сегодняшней даты. И все 3 xml-файла будут сохранены в этом на сегодня.

На завтра имя папки будет:

Xml_20121030_170912

Мой код выглядит следующим образом:

$location = New-Item -Path . -ItemType Directory -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)") $rptdir = "C:\Test" $ rptdir = ($rptdir + '\' + $location.Name) $outputFile= "$rptdir\File_2.xml" $row = "\\shared\Data\DevSB\CS\appSomeSystem.dll" & /f:$row /o:$outputFile

Ошибка вывода : Не удалось найти часть пути «C: \ test \ XML_29_10_2012_091717 \ File2.xml.

вопрос  здесь - папка XML_29_10_2012_091717 создана с файлом2.xml в ней, но не внутри C: \ Test, но где скрипт.

Мне нужен XML_29_10_2012_091717, который будет создан в C: \ test с File2.xml внутри него.

Окружающая среда : Win Xp Professional.

Любая помощь будет принята с благодарностью.

благодаря

Попробуй это:

New-Item -Path . -ItemType Directory -Name ("XML_$(Get-Date -f ddMMyyyy_hhmmss)")

Редактировать после комментариев:

попробуйте изменить это:

$location = New-Item -Path c:\test -ItemType Directory -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)") $outputFile= "$($location.fullname)\File_2.xml"

Полная версия:

New-Item -Path . -ItemType Directory -Name (Get-Date -f dd_MM_yyyy)

Вы также можете использовать md или mkdir

md (Get-Date -f dd_MM_yyyy) $location = New-Item -Path $rptdir -ItemType Directory **-force** -Name ("XML_$(Get-Date -f dd_MM_yyyy_hhmmss)")

Как насчет добавления команды -force cmd-let здесь?

programmerz.ru