ファイル/フォルダを新しい構造に移動する

ファイル/フォルダを新しい構造に移動する

フォルダー (およびサブフォルダーとファイル) をある場所から別の場所に移動できるようにしたいのですが、開始場所の各フォルダーから特定のサブフォルダーを 1 つだけ移動したいのです。

既存のフォルダ構造の例を次に示します。

E:\Estimates\Estimating Files\E27001
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Costings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Costings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Costings
E:\Estimates\Estimating Files\E27002
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Costings

見積りは多数ありますが、同じ番号でも末尾の文字が異なり、顧客名も明らかに変更されているものもあります。

次のように、Drawings フォルダーのみを新しいドライブとフォルダー構造に移動します。

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

図面フォルダーには、新しい場所に移動したいサブフォルダーとファイルも含まれます。

これまでのところ、このレベルまでの空のフォルダーしか作成できませんでした。

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

小さなバッチ ファイルを使用して、すべての推定値を 27000 から 30000 まで計算します。

しかし、ファイルやフォルダを移動するのは私の能力を超えています。誰かが私を助けてくれるか、または機能する可能性のある既存のユーティリティを知っていれば幸いです。

ありがとう!

答え1

次のように、Drawings フォルダーのみを新しいドライブとフォルダー構造に移動します。

このバッチファイルは役に立つかもしれません。すべての「Drawings」サブフォルダを見つけ、ディレクトリパスの一部をトークン化して新しいディレクトリ構造を構築し、見つかった各ディレクトリをサブディレクトリとともにコピーします。ロボコピー道具。

非常に重要:

  • バッチファイルは必ず「...\ファイルの見積もり「」フォルダーに保存してそこから実行するか、手動でsourceDir変数を設定します。

  • このスクリプトを使用する前に、ループのトークン数を手動で調整する必要がありますFor

    たとえば、私はこのソース フォルダーを使用しましたC:\Source\Estimates\Estimating Filesが、最初の 4 つのトークンを省略する必要があります。これは、Estimating Files部分の後からカウントを開始するためです。これが、以下のスクリプトで設定した理由ですTokens=4,5,6。異なるパスがある場合は、トークンを調整する必要があります。

    ソース ディレクトリが の場合E:\Estimates\Estimating Files、トークン パラメータを次のように設定する必要がありますTokens=3,4,5

  • コピーされたソース構造を自動的に削除したい場合は、/MoveRoboCopy パラメータに を追加するだけです。


ソースコード

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=C:\Target"

Set "findPattern=Drawings"

For /F "Tokens=4,5,6 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c"
    Call Set "targetPath=%targetDir%\%%Token1%%\%%Token1:~3%%\%%Token2:~3,2%%\%%Token2:~5%%\%%Token3%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

出力

ソース: "C:\Source\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings"

ターゲット: "C:\Target\E27001\001\01\A - Customer1\Drawings"

ソース: "C:\Source\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings"

ターゲット: "C:\Target\E27001\001\01\B - Customer2\Drawings"

ソース: "C:\Source\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings"

ターゲット: "C:\Target\E27001\001\01\C - Customer3\Drawings"

ソース: "C:\Source\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings"

ターゲット: "C:\Target\E27002\002\02\A - Customer1\Drawings"

答え2

このスクリプトを試してください。ただし、ドライブ文字を編集する必要があるかもしれません

setlocal EnableDelayedExpansion
@echo off
Q:
cd "Estimating\Estimating Files"
FOR /D /R %%G IN ("*Drawings*") DO (
FOR /F "tokens=4,5 delims=\" %%H IN ("%%G") DO (
set temp=%%H
set num=!temp:~4,2!
set temp=%%I
set alpha=!temp:~5!
MKDIR "Q:\E27XXX\0XX\!num!\!alpha!\Drawings"
CALL :mover "%%G" !num! !alpha!
)
)

:mover
FOR /R %1 %%X IN (*) DO (
COPY "%%X" "Q:\E27XXX\0XX\%2\%3 %4 %5\Drawings"
)

答え3

フォルダーを新しいディレクトリにコピーするために使用した最終的なコードは次のとおりです。ご協力いただいた @ElektroStudios に感謝します。

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=S:\E30xxx"

Set "findPattern=2 - Drawings"

For /F "Tokens=6,7,8,9 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "Token4=%%~d"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c\%%~d"
    Call Set "targetPath=%targetDir%\%%Token1:~3,1%%xx\%%Token2:~4,2%%\%%Token3:~6%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

RoboCoby と区切られた文字列のトークン化を理解するだけです。

関連情報