2014-01-22 4 views
0

질문은 혼란 스러울 수 있지만 실제로 필요한 것은 문자열 배열을 사용하여 파일 이름을 변경하는 것입니다. 1은 포함txt 파일의 문자열을 사용하여 파일 이름 바꾸기

파일 : 예

abc1234cd.jpg abc2543ac.jpg ...

파일 2 (어레이/기준)

1234c 2543a 포함 ...

abc1234cd.jpg의 새 파일 이름은 이제 1234c.jpg가되어야합니다.

powershell 또는 다른 언어로 가능합니까?

감사합니다.

+0

두 목록을 서로 연결할 수 있습니까? 1234c는 파일 1의 단일 레코드 (abc1234cd.jpg) 만 참조합니다. 이 두 가지 객체를 결합하는 데는 여러 가지 방법이 있습니다. 사람들은 재현 할 수있는 사용자 정의 Join-Object 함수를 작성했습니다. 하지만 그것은 두 배열이 일치 할 수 있는지에 달려 있습니다. – websch01ar

+0

실제로 abc1234cd.jpg가 abc1234cd2.jpg 일 수있는 상황이있을 수 있습니다. 1234c.jpg와 1234c-1로 이름을 바꿀 필요가 있습니다. 1234c-1.jpg에 1234c가 포함되어 있기 때문에 증분으로. – user3225168

답변

0

파일이 일대일로 일치한다고 가정합니다.

# Get contents of file 1 
$File1 = Get-Content -Path $PSScriptRoot\File1.txt; 
# Get contents of file 2 
$File2 = Get-Content -Path $PSScriptRoot\File2.txt; 

# Iterate over each item in $File1 
foreach ($Item in $File1) { 
    $FileList = Get-ChildItem -Path "c:\test\$Item*.jpg"; 
    foreach ($File in $FileList) { 
     # Determine file's new name, based on corresponding value in File2 
     $NewName = $File.Name -replace $Item, $File2[$File1.IndexOf($Item)]; 

     Write-Host -Object ('Old name: {0}, new name: {1}' -f $Item, $NewName); 
    } 
} 
+0

안녕하세요, Trevor 님, 복제본을 늘릴 수 있는지 궁금합니다. EX : abc1234cd.jpg 및 abc1234cd2.jpg (원본 파일)가 (1234c 및 1234c-1)이됩니다. – user3225168

+0

흠,이를 달성하기 위해 패턴 일치를 수행해야합니다. 이름의 공통 부분 인'abc1234cd'에서 간단한 regex 대체를 할 수 있습니다. –

+0

[untested] 코드로 답변을 업데이트했습니다. –

0

수많은 시간이 지나면 마침내 코드가 작동하게되었습니다.

$dir = 'file.txt' 
$backup = 'C:\Users\all users\Desktop\backup' 
$file = 'file2.txt' 
$files = Import-Csv -Header Name -Path $file 
foreach ($line in $files){ 
$linefiles = Get-ChildItem $dir | where {$_.BaseName.Contains($line.Name)} 
$count = 0 
foreach ($linefile in $linefiles) { 
    #do stuff to each file here 
    $name = $linefile.BaseName 
    $extension = $linefile.Extension 
    $newName = $line.Name 

    Copy-Item -Path "$dir\$linefile" -Destination "$backup\$linefile" 

    if ($count -gt 0){ 
     Rename-Item -NewName "$newName-$count$extension" -Path "$dir\$linefile"} 
    else{ 
     Rename-Item -NewName "$newName$extension" -Path "$dir\$linefile"} 

    $count++} 
} 
관련 문제