Home > Enterprise >  Get files from specific directories and put them in a flat structure with new file names
Get files from specific directories and put them in a flat structure with new file names

Time:10-21

The task of my PowerShell script is to get files from specified language folders and put them in a flat structure in another directory, with a new suffix (.new) and with underscore followed by the language tag in the file name.

Currently the $lang variable is not resolving properly, when renaming. How can I get it to resolve properly?

The new files are not supposed to be created in the source folder, they should go to another folder somewhere else, into a flat structure. How can I include that in my script?

And, a bonus question, for Chinese (zh) the language tag in file name should be zh-cn instead of zh (but the search folder is zh). (I will run Chinese as a separate case if it is too complicated...)

$languages = @('cs','tr','zh')
foreach ($lang in $languages) { Get-ChildItem *\*\$lang -Recurse -Filter "*mytext.xml" | Copy-Item -Destination {$_.Fullname -replace 'xml', '_$lang.new' } }

CodePudding user response:

I would do this using a ForEach-Object loop so we can make an exception on the zh to zh-cn conversion.

Something like this:

$languages   = 'cs','tr','zh'
$sourcePath  = 'X:\PathToWhereTheLanguageSUbfoldersAre'
$destination = 'Y:\PathToWhereTheFileCopiesShouldGo'

foreach ($lang in $languages) { 
    $langSource = Join-Path -Path $sourcePath -ChildPath $lang
    $suffix = if ($lang -eq 'zh') { 'zh-cn' } else { $lang }
    Get-ChildItem -Path $langSource -Recurse -Filter "*mytext.xml" -File | 
    ForEach-Object {
        $target = Join-Path -Path $destination -ChildPath ('{0}_{1}.new' -f $_.BaseName, $suffix)
        $_ | Copy-Item -Destination $target
    }
}
  • Related