2011-12-21 4 views
2

親愛なるPowerShellの達人に基づいて別の宛先フォルダにファイルをコピー:\ダウンロード\サイン。 ファイルの名前は、13X20 abcdjd.psf、8X20 jdscnjfc.psf、14X24 dje.psfなどとなります。 私は、これらのファイルをC:\ Downloads \ Signs内に作成された保存先フォルダに移動します。フォルダ名はファイル名の次元です。フォルダ名の例としては、13X20,8X20,14X24などがあり、そのサイズに応じて多くの一意のファイル名に依存します。 C:\ Downloads \ Signsフォルダにいくつのファイルがあるのか​​を手動で確認してから、個別に移動するのではなく、Powershellでどうすればいいのですか?PowerShellは - <p></p>私はフォルダと呼ばれるC内のファイルの数千を持っている、ファイル名

ありがとう、 Sanders。 \ダウンロード\兆候フォルダをし、(彼らが存在しない場合、フォルダが作成されます)先のフォルダにファイルを移動します:

+0

JNKを正直言って、私はファイル名の部分文字列でフォルダを作成する方法を理解できなかったので試してみませんでした。 – user982201

答えて

3

このスクリプトはCのルートからすべてのPSFをピックアップします

Get-ChildItem C:\Downloads\Signs -Filter *.psf | Where-Object {!$_.PSIsContainer} | Foreach-Object{ 

    $dest = Join-Path $_.DirectoryName $_.BaseName.Split()[0] 

    if(!(Test-Path -Path $dest -PathType Container)) 
    { 
     $null = md $dest 
    } 

    $_ | Move-Item -Destination $dest -Force 
} 
+0

ありがとうシェイ、これは完璧に動作しています。早速の対応、ありがとうございました。ファイルのサイズがファイル名の途中にある場合はどうなりますか?今のところではなく、13X20.psfまたはabcde 8X12.psfのderfと言います。私はそのために括弧内の分割パラメータを変更しますか? Powershellで私を教育してくれてありがとう。 – user982201

+0

あなたは位置について具体的にする必要があり、コマンドはそれに応じて変更されることがありますが、あなたの質問に答えるには、アイテムインデックス1:$ _。BaseName.Split()[1]を取得する必要があります。名前にはファイルの除外も含まれているので、NameではなくBaseNameプロパティを使用するように答えを更新したことに注意してください。 –

+0

ありがとうShey。しかし、13X20_derf.psfのようなファイル名のファイルもあります。したがって、この場合、ファイル名の最初の5バイトを部分文字列にする必要があります。基本的には、開始位置と長さを入力変数としてファイル名の部分文字列の構文を探しています。それを行う方法はありますか? – user982201

関連する問題