Файл перемещается в соответствии с подстрокой, полученной из имени файла - PullRequest
3 голосов
/ 06 сентября 2011

Я запустил простой скрипт для перемещения файлов с определенным префиксом в папку с таким же именем, например: W100_11.jpg W100_12.jpg, в папку W100.

Благодаря помощи из ответов нижеЯ прошел и успешно завершил цикл, который может перебирать файл в папке, у меня проблемы с переключателем -filter, и при попытке использовать командлет move-item я получаю ошибки

Текущий кодis:

$sourceDir = read-host "Please enter source Dir:"
$format = read-host "Format to look for with .  :"
#$length = read-host "length of folder name:"

gci -Path $sourceDir | % {
    If( -not $_.PSIsContainer)
    {
        $path = $sourceDir + "\" + $_.Name.substring(0, 3)
        $_
        if(-not (Test-Path $path))
        {
            mkdir $path

        }
        move $_.fullname $path

    }  
}

У меня все еще возникают проблемы при использовании ключа -filter.Это частичное решение проблемы

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

Приведенный ниже код сокращает цикл for и показывает пример использования подстрок в именах файлов. Вы получаете объект FileInfo из вызова Get-ChildItem (gci), поэтому вам нужно использовать его свойство Name для создания подстрок. См. MSDN для получения дополнительной информации о FileInfo.

$sourceDir = read-host Please enter source Dir
$format = read-host Format to look for with .  

gci -Path $sourceDir -filter $format | % {
    If( -not $_.PSIsContainer)
    {
        $path = $sourceDir + "\" + $_.Name.substring(0, 3)  
        if(-not (Test-Path $path))
        {
            mkdir $path
        }
        move $_ $path
    }  
}
1 голос
/ 06 сентября 2011

Когда в конвейере используется встроенная переменная $ _ для ссылки на переданный объект, знак «%» является псевдонимом «для каждого»:

get-childitem -Path $sourceDir -Filter $format -Recurse | % {If ($_.extension -eq ".ps1"){Write-Host $_.fullname}}

Ответы выше относятся к подстроке, вот страница MS Technet, которая объясняет использование подстроки Powershell:

http://technet.microsoft.com/en-us/library/ee692804.aspx

1 голос
/ 06 сентября 2011

Если имена файлов всегда с этим префиксом "W100", вы можете легко взять подстроку следующим образом:

$a = "w100_12.ps1"
$a.Substring(0,4) # give W100

, если префикс не исправлен, дайте больше примеров, чтобы помочь вам решить его.

...