2013-05-30 3 views
1

У меня есть сценарий powershell, который принимает все файлы в одном каталоге, переименовывает первый и перемещает его, а затем переходит к следующему файлу. Иногда будет несколько файлов, которые будут переименованы в одно и то же имя (из-за системы, в которой он собирается, а не идеально и придется менять) и переписывали файлы, которые не должны были быть перезаписаны с помощью -force. Мне нужны все файлы для перемещения, но также имеют уникальные имена, поэтому мы имеем их в целевом местоположении. Есть простой способ, чтобы он автоматически переименовывать так это будет выглядеть следующим образом:Powershell Move-Item Переименовать, если файл существует

123.txt 123 (1) .txt 123 (2) .txt

или

123.txt 123_1.txt 123_2.txt

+1

У меня есть смутное представление о 'powershell' (имя шутка сама по себе ...), но не предлагают некоторые имена файлов функции создания будучи гарантированно быть уникальным, как и другие окружающая среда? – arkascha

+0

Я нашел документацию, но ничего не видел об уникальных именах, просто чтобы заставить ее переместить и перезаписать файл, который уже существует, или он выдает ошибку и пропускает переход, оставляя старый файл и новый файл в своих соответствующих каталогах , – bmbaeb

ответ

4

Нет встроенного способа сделать это. Дайте это попробовать:

$src = "d:\temp" 
$dest = "d:\temp1" 
$num=1 

Get-ChildItem -Path $src -Filter *.txt -Recurse | ForEach-Object { 

    $nextName = Join-Path -Path $dest -ChildPath $_.name 

    while(Test-Path -Path $nextName) 
    { 
     $nextName = Join-Path $dest ($_.BaseName + "_$num" + $_.Extension)  
     $num+=1 
    } 

    $_ | Move-Item -Destination $nextName 
} 
Смежные вопросы