none
powershell copy-item RRS feed

  • Вопрос

  • Здравствуйте
    есть две папки.а папке 1 лежит файл example (2), в папке 2 лежал файлы example (1) example (2), каким образом можно копировать файл exemple (2) в папку 2,с именем example (3),но не ренеймом, если имена двух файлов совпадают ,при копировании назначить ему следующее порядковое число

    спасибо за ответы

    • Изменено last_kpojl 23 апреля 2015 г. 20:28
    23 апреля 2015 г. 20:28

Ответы

  • [int]$i = $matches[1]  - получаем число в скобках

    $n = $_.basename -replace [regex]::escape($matches[0]),"($i)" - заменяем число в скобках + 1

    PS 1 >  "exemple (2)" -match "\((\d+)\)"
    True
    PS 2 >  $matches
    
    Name                           Value
    ----                           -----
    1                              2
    0                              (2)
    
    
    PS 3 >  $matches[1]
    2
    PS 4 >  [int]$i = $matches[1]
    PS 5 >  $i++
    PS 6 >  "exemple (2)" -replace [regex]::escape($matches[0]),"($i)"
    exemple (3)

    • Предложено в качестве ответа Vector BCOModerator 28 апреля 2015 г. 18:00
    • Помечено в качестве ответа last_kpojl 28 апреля 2015 г. 18:26
    28 апреля 2015 г. 17:06
    Отвечающий
  • $folder = "C:\Folder\"
    
    "C:\Folder1\example (2)","C:\Folder2\example (1)","C:\Folder2\example (2)" | Get-ChildItem | Copy-Item -Destination { 
    	if ($_.basename -match "\((\d+)\)")
    	{
    		[int]$i = $matches[1]
    		$new = $folder + $_.basename + $_.Extension 
    		while(Test-Path $new){ 
    			$i++
    			$n = $_.basename -replace [regex]::escape($matches[0]),"($i)"
    			$new = $folder + $n + $_.Extension 
    		} 
    		$new
    	}
    }

    • Помечено в качестве ответа last_kpojl 24 апреля 2015 г. 7:12
    24 апреля 2015 г. 6:40
    Отвечающий
  • http://www.powershelladmin.com/wiki/Powershell_regular_expressions

    PS > "exemple #2" -match "#(\d+)"
    True
    PS > $matches
    
    Name                           Value
    ----                           -----
    1                              2
    0                              #2
    
    
    PS > $matches[1]
    2
    PS >
    PS > "exemple #2" -match "#(?<chislo>\d+)"
    True
    PS > $matches.chislo
    2
    
    
    
    
    PS > "exemple #2" -match "(?<name>exemple) (?<reshetka>#)(?<chislo>\d+)"
    True
    PS > $matches
    
    Name                           Value
    ----                           -----
    reshetka                       #
    name                           exemple
    chislo                         2
    0                              exemple #2
    
    
    PS > $matches.name
    exemple
    PS > $matches.reshetka
    #
    PS > $matches.chislo
    2

    • Помечено в качестве ответа last_kpojl 29 апреля 2015 г. 14:54
    29 апреля 2015 г. 13:31
    Отвечающий

Все ответы

  • $folder = "C:\Folder\"
    
    "C:\Folder1\example (2)","C:\Folder2\example (1)","C:\Folder2\example (2)" | Get-ChildItem | Copy-Item -Destination { 
    	if ($_.basename -match "\((\d+)\)")
    	{
    		[int]$i = $matches[1]
    		$new = $folder + $_.basename + $_.Extension 
    		while(Test-Path $new){ 
    			$i++
    			$n = $_.basename -replace [regex]::escape($matches[0]),"($i)"
    			$new = $folder + $n + $_.Extension 
    		} 
    		$new
    	}
    }

    • Помечено в качестве ответа last_kpojl 24 апреля 2015 г. 7:12
    24 апреля 2015 г. 6:40
    Отвечающий
  • не могли бы вы пояснить что значит вот эти строчки

    [int]$i = $matches[1] 
    $n = $_.basename -replace [regex]::escape($matches[0]),"($i)"

    28 апреля 2015 г. 16:57
  • [int]$i = $matches[1]  - получаем число в скобках

    $n = $_.basename -replace [regex]::escape($matches[0]),"($i)" - заменяем число в скобках + 1

    PS 1 >  "exemple (2)" -match "\((\d+)\)"
    True
    PS 2 >  $matches
    
    Name                           Value
    ----                           -----
    1                              2
    0                              (2)
    
    
    PS 3 >  $matches[1]
    2
    PS 4 >  [int]$i = $matches[1]
    PS 5 >  $i++
    PS 6 >  "exemple (2)" -replace [regex]::escape($matches[0]),"($i)"
    exemple (3)

    • Предложено в качестве ответа Vector BCOModerator 28 апреля 2015 г. 18:00
    • Помечено в качестве ответа last_kpojl 28 апреля 2015 г. 18:26
    28 апреля 2015 г. 17:06
    Отвечающий
  • ясно. не мог понять что за $matches.спасибо
    28 апреля 2015 г. 18:27
  • PS C:\Windows\system32>  "exemple #2" -match "#\d+"
     $matches
    True
    
    Name                           Value                                                                                  
    ----                           -----                                                                                  
    0                              #2        

            

    почему в данном примере name[1] не равен 2, как у вас 

    PS 1 >  "exemple (2)" -match "\((\d+)\)"
    True
    PS 2 >  $matches
    
    Name                           Value
    ----                           -----
    1                              2
    0                              (2)

    29 апреля 2015 г. 13:19
  • http://www.powershelladmin.com/wiki/Powershell_regular_expressions

    PS > "exemple #2" -match "#(\d+)"
    True
    PS > $matches
    
    Name                           Value
    ----                           -----
    1                              2
    0                              #2
    
    
    PS > $matches[1]
    2
    PS >
    PS > "exemple #2" -match "#(?<chislo>\d+)"
    True
    PS > $matches.chislo
    2
    
    
    
    
    PS > "exemple #2" -match "(?<name>exemple) (?<reshetka>#)(?<chislo>\d+)"
    True
    PS > $matches
    
    Name                           Value
    ----                           -----
    reshetka                       #
    name                           exemple
    chislo                         2
    0                              exemple #2
    
    
    PS > $matches.name
    exemple
    PS > $matches.reshetka
    #
    PS > $matches.chislo
    2

    • Помечено в качестве ответа last_kpojl 29 апреля 2015 г. 14:54
    29 апреля 2015 г. 13:31
    Отвечающий