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
}
}