2017-11-25 17 views
1

現在、私は大量のエンドユーザファイルをNTFSからMS OneDriveに移行しようとしています。私が直面している問題は、OneDriveがファイル名の特殊文字をサポートしていないことであり、これらのファイルはそれらで詰まっているということです。powershellのファイル名から特殊文字を削除する

ファイルやフォルダの構造を新しいコピー先にコピーし、PSスクリプトを実行して名前を変更し、すべての特殊文字を削除します。

Get-childobject -recurseシームはここで最適です。どのように私は希望のいずれかのパイプに、私は確かではないよしかし

$newname = $oldname.replace ("&"," and ") 
$newname = $newname.replace (" & "," and ") 
$newname = $newname.replace ("/"," ") 
#etc... 

または一緒にこれらを一括してそれも可能な場合:

私はの線に沿って何かを使用して1つのファイルの名前を変更することができますか?

また、私が見落としたことははるかに簡単ですか?

すべてのヘルプは大歓迎です!一緒に複数の置き換え操作をラップする

+1

こんにちは、StackOverflowのに歓迎し。ヘルプページ、特に[ここではどのトピックについて聞かせていただけますか?](http://stackoverflow.com/help/on-topic)と[質問しないでください。」](http://stackoverflow.com/help/dont-ask)。さらに重要なことは、[Stack Overflow question checklist](http://meta.stackexchange.com/q/156810/204922)をお読みください。また、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)についても知りたいことがあります。 – Clijsters

+0

_Get-childobject-ここで最善の選択肢を取得する必要があります。拡張モジュールをインストールしないとすぐに、Get-ChildObjectはありません。また、NTFSはファイル名に '/'をサポートしていません。 – Clijsters

答えて

1

、1は次のように[String]Replace()メソッドをラップすることができ、次のいずれか

$newName = $oldName.Replace("&", "and").Replace("_", "-") #etc. 

またはPowerShellsが-replace演算子の組み込み使用しますが規則に一般的にフィット文字列に

$newName = $oldname -replace "&", "and" -replace "_", "-" #etc. 

[uri]::EscapeDataString()のようなメソッドです。 OneDriveとそのファイル名の規則についてはわかりませんが、インターネットのURLに変換できる必要があると思います。


それがより読みやすい1は次のようHashTableを構築できるようにするには:

$replacements = @{ 
    "&" = "and"; 
    "_" = "-"; 
    "/" = "-"; 
} 
$fileName = "Actually/IsSupportedByNeitherNTFSNorOneDrive" 
$replacements.Keys | ForEach-Object {$fileName = $fileName.replace($_, $replacements[$_])} 
Write-Output $fileName 
#Actually-IsSupportedByNeitherNTFSNorOneDriveandsomeOthers 
関連する問題