1

一部のフォルダ内のすべてのファイルを、同じフォルダ内に新しく作成されたフォルダに移動したいと思います。理解を容易にするために、以下の例を参照してください(入力は左に、出力は右に表示されます)。

C:\1\A\file1.tif            C:\1\A\Named\file1.tif
       file2.tif                         file2.tif
       file3.tif     ==>                 file3.tif
C:\1\B\file1.tif            C:\1\B\Named\file1.tif
       file2.tif                         file2.tif
       file3.tif                         file3.tif

上記の例では、すべてのフォルダーの最初の3つのファイルのみを示していますが、総数は異なる場合があります(通常、フォルダーごとに1000個のファイルがあります)。また、2つのフォルダー(AとB)のみを表示しましたが、フォルダーの総数も異なる場合があります(通常は約10フォルダー)。最後に、フォルダ「1」のみを示しましたが、これらの種類のフォルダの数も異なる場合があります(通常は「1」から「10」)。そのため、ファイルやフォルダーの数やフォルダー/ファイルの名前に関係なく、これらのアクションを実行できるスクリプトを探していました(例として「1」、「A」、「file1.tif」のみを選択しました)。 )。

アイデアは、ファイルがある各フォルダー(上記の例では「A」と「B」)に空のフォルダー(上記の例では「Named」と呼ばれる)を手動で作成する必要があるということです。次に、すべてのファイルを新しく作成したフォルダ「名前付き」に手動で移動する必要があります。すべてのフォルダ(約100)に対してこれを行う必要があります。このプロセス全体を1回だけ実行する必要がある場合は手動で実行できますが、このプロセスを何度も実行する必要があります:-)。したがって、これを自動化すると、多くの時間を節約できます。

これを実行できるスクリプトを知っている人はいますか?どうもありがとう!

4

2 に答える 2

1

コマンドファイルで少しテストしましたが、これはうまくいくかもしれません

これらの行でcmdファイルを作成します

for /r %%a in (*.*) do  call :singlecopy %%a
goto :eof

:singlecopy
set src=%~p1
set dst=%~p1NAMED
set file=%~n1%~x1
rem replace NAMED in src with nothing
set srctst=%src:NAMED=%
rem if src and srctst are still the same, copy 
if %srctst%==%src%  robocopy %src%  %dst% %file% /move /create
goto :eof
于 2012-12-28T13:45:54.253 に答える
0

徹底的なテストの後、これはうまく機能します。ただし、ファイルが多いため、実際のデータで使用する前に、最初にこれを使用するように、例のように小さなテスト環境を設定することをお勧めします。

setlocal enabledelayedexpansion
cd C:\rootfolder
for /f "tokens=*" %%a in ('dir /s /b /a:d') do (
attrib "%%a\*.*" | find "File not found"
if !errorlevel!==1 (
if not exist "%%a\Named" md "%%a\Named"
xcopy "%%a\*.*" "%%a\Named"
del "%%a\*.*" /f /q
)
)
于 2012-12-31T10:49:44.703 に答える