Söker bred hjälp med att komma vidare i ett batch-skript (eller liknande automation) som ska söka igenom mappar, efter filer med ”otillåtna” tecken filnamnet, och omedelbart ersätta såna förbjudna otillåtna tecknen med förinställda alternativ. För god OS-kompatibilitet har jag börjat i MS Powershell (sitter på Win10 själv).
Jag vet det finns ExIF och andra verktyg man kan använda sig av, men jag vill göra det oberoende av tredjepartsgrejor.
Jag tyckte ska ska väl bara vara att iterera igenom filerna och deras namn, och ersätta alla förekomster av angivna tecken med andra förutbestämda tecken. Men icke. Problemet är att jag stöter hela tiden på stora hinder med att dom ”otillåtna” tecknen måste anges i koden och accepteras då inte som giltig kod, alternativt kräver invecklade bearbetningar för att få PS att tolka dom som sträng-innehåll. Blir ett himla micklande med escape-scenarion som jag inte lyckas komma runt på ett konstruktivt sätt.
T.ex. om man vill ange att det är citat-tecken (”) som man vill hitta- och ersätta i filnamn, då ska citat-tecken skrivas in i koden omgärdade av … citat-tecken som avgränsar strängdatan i PS. Då blir koden
Escape-tecknet i PS funkar i fallet med citat-tecken,
Jag är osäker på om det är kunskapsnivån eller lösningen det är fel på, eller om PS är dåligt rustat för såna här operationer? Har snöat in lite djupt i hjärnan på det här nu. Söker lite hjälp med det här.
Jag har 152 ASCII-tecken jag vill kunna hitta och ersätta i filnamn, och efter några dagar har jag bara lyckats få en process som hittar och ersätter 8 stycken. Här är vad jag gjort hittills, försöker fixa så asterisk och plus funkar. Får inte till ens det.
Och här är tecknen jag vill hitta i filnamn, om dom finns, och ersätta:
Hur skulle ni göra för den här funktionaliteten?
Även helt andra förslag välkomna, men helst så OS-oberoende som möjligt utan tredjepart-beroenden.
Jag vet det finns ExIF och andra verktyg man kan använda sig av, men jag vill göra det oberoende av tredjepartsgrejor.
Jag tyckte ska ska väl bara vara att iterera igenom filerna och deras namn, och ersätta alla förekomster av angivna tecken med andra förutbestämda tecken. Men icke. Problemet är att jag stöter hela tiden på stora hinder med att dom ”otillåtna” tecknen måste anges i koden och accepteras då inte som giltig kod, alternativt kräver invecklade bearbetningar för att få PS att tolka dom som sträng-innehåll. Blir ett himla micklande med escape-scenarion som jag inte lyckas komma runt på ett konstruktivt sätt.
T.ex. om man vill ange att det är citat-tecken (”) som man vill hitta- och ersätta i filnamn, då ska citat-tecken skrivas in i koden omgärdade av … citat-tecken som avgränsar strängdatan i PS. Då blir koden
Kod:
.. vilket PS inte godkänner som giltig kod. if ($_.Value -match """)
Escape-tecknet i PS funkar i fallet med citat-tecken,
Kod:
men den lösningen funkar inte för tecken som + eller * eller Ù och andra tecken, vilket förmodligen kräver helt andra lösningar – okända för mig just nu. (se kod-försök nedan)if ($_.Value -match "`"")
Jag är osäker på om det är kunskapsnivån eller lösningen det är fel på, eller om PS är dåligt rustat för såna här operationer? Har snöat in lite djupt i hjärnan på det här nu. Söker lite hjälp med det här.
Jag har 152 ASCII-tecken jag vill kunna hitta och ersätta i filnamn, och efter några dagar har jag bara lyckats få en process som hittar och ersätter 8 stycken. Här är vad jag gjort hittills, försöker fixa så asterisk och plus funkar. Får inte till ens det.
Kod:
Och här en lista på tecknen jag vill hitta och ersätta i filnamn:$Folder = "c:\testmapp\undermapp" $Items = Get-ChildItem -Path $Folder -Recurse $UnsupportedChars = "[!#$%&'()*+,-./:;<=>?@[\]^_`{|}~€‚ƒ`„…†‡ˆ‰Š‹ŒŽ‘’`“`”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯ÅÅÖ]" foreach ($item in $items){ filter Matches($UnsupportedChars){ $item.Name | Select-String -AllMatches $UnsupportedChars | Select-Object -ExpandProperty Matches Select-Object -ExpandProperty Values } $newFileName = $item.Name Matches $UnsupportedChars | ForEach-Object { Write-Host "Otillatet tecken i $($item.FullName): $($_.Value)" -ForegroundColor Red if ($_.Value -match "!") { $newFileName = ($newFileName -replace "!", "") } if ($_.Value -match "`"") { $newFileName = ($newFileName -replace "`"", "") } if ($_.Value -match "#") { $newFileName = ($newFileName -replace "#", "") } if ($_.Value -match "$") { $newFileName = ($newFileName -replace "$", "") } if ($_.Value -match "%") { $newFileName = ($newFileName -replace "%", "") } if ($_.Value -match "&") { $newFileName = ($newFileName -replace "&", " and ") } if ($_.Value -match "'") { $newFileName = ($newFileName -replace "'", "") } # if ($_.Value -match ""*"") { $newFileName = ($newFileName -replace "*", "") } # if ($_.Value -match "+") { $newFileName = ($newFileName -replace ''+'', "") } # osv osv } if (($newFileName -ne $item.Name)){ Rename-Item $item.FullName -NewName ($newFileName) Write-Host "$($item.Name) andrat till $newFileName" -ForegroundColor Green } }
Och här är tecknen jag vill hitta i filnamn, om dom finns, och ersätta:
Kod:
Krånglar jag till det? Är PS ett dåligt val? Är det möjligt att ta sig igenom allt detta med olika escape-lösningar eller liknande? !#$%&'()*+,-./:;<=>?@[\]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâã äåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
Hur skulle ni göra för den här funktionaliteten?
Även helt andra förslag välkomna, men helst så OS-oberoende som möjligt utan tredjepart-beroenden.
__________________
Senast redigerad av Marinerad65 2023-12-12 kl. 04:14.
Senast redigerad av Marinerad65 2023-12-12 kl. 04:14.