Hi all
I am trying to write a batch file which would recursively delete folders with a specific name inside a tree. i am just not able to do that. Please help me.
thanks for your help in advance
Hi all
I am trying to write a batch file which would recursively delete folders with a specific name inside a tree. i am just not able to do that. Please help me.
thanks for your help in advance
If you need to remove only directories that match a specific name (not the whole tree), you can walk the tree and match on the leaf folder name instead of parsing DIR output. This avoids many quoting issues that bit folks earlier (good catch by dgarcia182) and gives you a safe dry‑run. Ancient Dragon’s caution still applies: test from a non‑root folder.
Example (deletes every ".svn" folder under D:\Work):
:: dry-run: list what would be removed
for /r "D:\Work" %%D in (.) do if /i "%%~nxD"==".svn" echo RD /S /Q "%%D"
:: when you're sure, remove ECHO:
for /r "D:\Work" %%D in (.) do if /i "%%~nxD"==".svn" RD /S /Q "%%D" Notes and fixes you can apply immediately:
%%~nx modifier to compare just the folder name; this is more robust than parsing command output. See FOR command. for /r "D:\Work" %%D in (.) do if /i "%%~nxD"==".svn" (
attrib -r -h -s /s /d "%%D\*" >nul 2>&1
RD /S /Q "%%D"
) Troubleshooting:
Jump to Post— Ancient Dragon 5,243batch files are generally pretty simple-minded things, not at all as powerful as *nix shell scripts. For more complicated tasks you would be better off writing a program in some other language, such as C or C++.
Jump to Post— Member #46692There should be an option to delete an entire tree, so you wouldn't need to recursively delete it.
Jump to Post— Ancient Dragon 5,243yes there is that option, but the way I understand it is that he only wants to delete selected files/folders, not all of them. Use "rd /s" command to remove all the files and directories in the current tree. warning: do not do this from root directory such as c:\
Jump to Post— vanillabean 3Hi all
I am trying to write a batch file which would recursively delete folders with a specific name inside a tree. i am just not able to do that. Please help me.
thanks for your help in advance
This will do the trick:
FOR /F "tokens=*" %%G IN …
batch files are generally pretty simple-minded things, not at all as powerful as *nix shell scripts. For more complicated tasks you would be better off writing a program in some other language, such as C or C++.
There should be an option to delete an entire tree, so you wouldn't need to recursively delete it.
yes there is that option, but the way I understand it is that he only wants to delete selected files/folders, not all of them. Use "rd /s" command to remove all the files and directories in the current tree. warning: do not do this from root directory such as c:\
Hi all
I am trying to write a batch file which would recursively delete folders with a specific name inside a tree. i am just not able to do that. Please help me.
thanks for your help in advance
This will do the trick:
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q %%G
If you're thinking WTF?:
DIR /B /AD /S *.svn*
lists all files that are named ".svn"
/B makes the output "bare" with nothing but the file name
/AD only lists directories
/S recurses subdirectories to include their contents if they match the listing criteria
RMDIR /S /Q [path/name]
deletes the directory [path/dir] and all of it's children
FOR /F processes each item (in this case directories) in the set IN ('[command]') by executing the DO [command]
%%G is a parameter, which in this example is a directory name
"tokens=*" says that all the characters output in a line (i.e. by the dir command) are assigned to the parameter %%G
See the Microsoft Command Line Reference for more on FOR:
Thanks for the script, it works great! Some of my directories would not delete due to having spaces in the directory names, for instance C:\out\IQSv3\Portal\Web References\Service\.svn. Adding quotes around the %%G fixed this problem.
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%%G" I am having issues with this command... I get the following error when trying to use this:
D:\Backup to Disk # 1>FOR /F "tokens=*" %%G IN ('DIR /b /ad /s "d:\Backup to Disk # 1\img*"') DO RMDIR /S /Q "%%G"
%%G was unexpected at this time.
It is referencing the first instance of that. I do not know why... any ideas? I am trying this on server 2003 to remove a backup to disk instance once it is backed up to a tape incase anyone wondered.
Hrmm Actually. It does work. My bad. I needed single quotes when testing it outside the batch file.
I haven't tried batch file but if you want to do this just once you can use normal windows search. Just search .svn and check option search hidden files in advanced options. Then just delete all .SVn's from search results.
hi i am new this forum, unable to find where to post my question.
i need a batch file ,should delete oldfiles except last 15 days, means i should retain only last 15 days folder. the folder name is based on date,ex- today folder will be help.thanks in advane.
thanks
kanyan
Doggfather - Im getting the same error - when applying single quotes from command line. Does anyone know what Im doing wrong...Ive tried:
1. FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q %%G
2. FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q '%%G'
3. FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%%G"
4. FOR /F "tokens=*" '%%G' IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%%G"
5. FOR /F "tokens=*" "%%G" IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q "%%G"
6. FOR /F "tokens=*" '%%G' IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q %%G
7. FOR /F "tokens=*" "%%G" IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q %%G
No matter what I do i get:
%%G was unexpected at this time.
Doggfather - Im getting the same error - when applying single quotes from command line. Does anyone know what Im doing wrong...
No matter what I do i get:
%%G was unexpected at this time.
Yes I know exactly what your doing wrong. This will not work if entered directly at the command prompt because the double % syntax is only for running the command from a batch file. From the command line you only need a single %G for it to work properly. Hope that help somebody out there who was looking for the answer to this one.
Hello,
Create a text file and copy the below command line:
Echo batch file delete folder
@RD /S /Q "D:\testfolder" Save like a DeleteFolder.bat. Save anywhere except D:\testfolder.
Change "D:\testfolder" with your folder path and done.
More information on blog
Best regards
That doesn't do what the OP requested. Plus, why bother to create a batch file that contains only one line and does only one specific thing for a specific folder?
Also, please do not revive old threads.
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.