0

私は次のことができるようにするためのスクリプトを求めています

私は約2000のディレクトリを持っており、その中にファイルとフォルダがあります

メインフォルダを削除したいのですが、すべてをフォルダ内に残しておきます

つまり、1つのフォルダの例

Folder A / Folder 2 / Video 1
           Image1
           Image2

したがって、メインの最初のフォルダーを削除できるようにします。この場合は、「フォルダーA」になります。

Folder 2 / Video 1
Image1
Image2

質問するだけでなく、私が何をしたいのか理解していただければ幸いです。乾杯

追加情報

これから

C:/folder A/Stuff
C:/folder B/Stuff
C:/folder C/Stuff

これに

C:/stuff
C:/sfuff
C:/sfuff

このバットでフォルダーを削除し、そのフォルダー内から.batを実行した場所にすべてを移動できるようにしたいだけです。また、他のドライブで.batを実行できるようにしたいD:/ E; / F; /多くの場所

4

2 に答える 2

1

ディスクにこの構造がある場合:

C:\Folder A
|  | Folder 2
|  | | Video 1
|  | | | Image1
|  | | | Image2

...そしてあなたはこれらのコマンドを実行します:

cd "\Folder A"
move "Folder 2" ..

...次に、次の結果が得られます。

C:\Folder A
|  Folder 2
|  | Video 1
|  | | Image1
|  | | Image2

つまり、「フォルダ2」を1つ上のレベルに移動し、「フォルダA」と同じレベルに移動します。「フォルダA」内のすべてのフォルダで同じことを行い、それを削除する場合、このバッチファイルは次のことを行います。

@echo off
cd "\Folder A"
for /F "delims=" %%a in ('dir /B /AD') do (
   move "%%a" ..
)
cd ..
rd "\Folder A"

これは、あなたの望むことですか?

編集:新しいコメントへの回答として追加された新しいバージョン

@echo off
rem Eliminate all folders present at the same level of the Batch file
rem and move their contents one level up
for /F "delims=" %%a in ('dir /B /AD') do (
   cd "%%a"
   for /F "delims=" %%b in ('dir /B /AD') do (
      move "%%b" ..
   )
   move *.* ..
   cd ..
   rd "%%a"
)

ものの中の2つ以上のフォルダまたはファイルが同じ名前であり、それらが削除される最上位のフォルダのすぐ下に元々配置されていた場合、プログラムはエラーを発行し、フォルダまたはファイルはエラーを発行しないことに注意する必要があります移動されます(最上位のフォルダは削除されません)。

アントニオ

于 2013-03-25T21:50:56.243 に答える
0
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "relroot=c:\destdir"
SET "relrootd=c:\destdir"
SET "eliminate=folder a"
XCOPY /t /e "%relroot%\%eliminate%" "%relrootd%"
FOR /f "delims=" %%i IN ('dir /s /b /a-d "%relroot%\%eliminate%"') DO (
  SET dest=%%i
  SET dest=!dest:%relroot%\%eliminate%=%relrootd%!
  ECHO MOVE "%%i" "!dest!" >nul
)

これでうまくいくはずですが、好きなpoison特別な意味を持つ一部のファイル/ディレクトリ名の文字は処理されない可能性があります。通常の英数字、記号、スペースは問題ありません。CMD.EXE^&!%

relrootはソース、relrootdは宛先です。必要に応じて、同じでも異なっていてもかまいません。バッチファイルのテストに使用c:\destdirするディレクトリであるため、使用しました。

XCOPY適切な空のツリーを作成します。

ディレクトリ名を除くサブディレクトリを含む基本モードでのDIR出力は行ごとに処理され、元のディレクトリとディレクトリから宛先は宛先のrelrootに置き換えられ、PROPOSED操作が表示されます。/b/s/a-drelrooteliminate MOVE

ECHO確認後、キーワードを削除して移動をアクティブにします。

relroot\eliminate削除する前に、元のディレクトリが空かどうかを確認します。念のために...

于 2013-03-25T18:11:44.877 に答える