Reputation: 639
I recently exported the HDD on my panasonic camera to my notebook and noticed that the video files weren't ordered by name, but by their parent directory and said parent directory was clouded with a bunch of miscellaneous files.
To put things into perspective, the directory tree looks something like this:
\Panasonic
\PRG00A
\PRG00B
...
\PRG069
Panasonic is located inside a bunch of folders, hence why I would like to put my batch file alongside \Panasonic
. And have it work relatively to its location.
So basically I want to create a batch file move.bat
, which shall traverse the subdirectories of \Panasonic
and move out any video files (with extension .MOD to simplify things) and afterwards delete the parent directory (e.g. \PRG00B
).
The result would be that the \Panasonic
directory only includes video files instead of sub-directories with a bunch of rubbish.
What I've got so far (keep in mind that this is my first batch script, and I haven't even tested it fully). The choice to continue doesn't work, by the way. Not sure why, though.
@echo off
cls
set dirName=%~dp0Panasonic
goto question
:start
goto move
goto end
:move
for /D %%G in ("%cd%") do (
for %%I in ("%%G") do (
if %%I equ "*.MOD" (
move /Y %%I %dirName%
)
)
rmdir /s /q %%G
)
:end
echo Done.
pause
endlocal
exit
:question
set /P c="Are you sure you want to proceed with moving video files from %dirName%? [Y/N]"
if /I %c% equ 'y' (
echo Moving files...
goto start
) else (
goto end
)
Once again, this is my first time creating a batch file, so any help is much appreciated!
Upvotes: 0
Views: 124
Reputation: 29339
you are almost there, but just need to fix a couple of things, very easy to fix, in fact, you just need to simplify a lot your code.
Just in three simple steps
Step 1. To loop over all the directories you already had it right, your friend is for /d
for /d %%a in (*) do echo %%a
Step 2. To move all the .mod
files in each of the directories found, to its parent directory or one directory up in the hierarchy, that happens to be the current directory, you just need to
move %%a\*.mod .
don't use /y
option, so it will not overwrite existing files already moved to the parent directory (You will have the opportunity the check the results later. Keep reading)
Step 3. And finally, remove the directory,
rd %%a
but don't use /s
, so it will only work it the directory is empty, that is, if you have successfully moved out all of the files it contained. This way you can then browse thru them to see what is left without losing any data.
So, your moveupallmod.bat
becomes simply
@echo off
for /d %%a in (*) do (
move "%%a\*.mod" .
rd "%%a"
)
and that's all!
Upvotes: 1