Delete files and folders in a specified folder - batch-file

I want to delete all files and folders in a specified folder. The end result should be that the folder is not deleted itself, just empty. In the linux world it is:
rm -rf /home/kasper/*
I have tried del, deltree and rd without luck. They either just delete files or delete everything including the folder itself.

this script inside your folder should solve it:
for /D %%F in (*) do ( rmdir /s/q .\%%~F)
del /q *.*

rmdir /s/q folder

Assuming you are running Windows.
The basic command line tools in Windows are rather limited. However, you can do this and many other tasks easily in PowerShell:
remove-item C:\test\* -recurse
If you prefer the Linux way, you can use UnxUtils, which is a collection of Unix command line tools natively compiled for Windows. I always have these in my PATH.

Related

Sync two folders using batch file

I want to use a batch file to synchronize 2 folders on Windows, and I'm using the xcopy command like this
xcopy /s /d <Original Folder> <Destination Folder>
It's working perfectly because I just want to overwrite only the modified ones, but I have 1 tiny problem, when I delete a file from the original folder, that file remains in the destination folder when i run the batch file, breaking the synching I want to achieve... I think this can't be done with xcopy, but I don't know which command I should use in case I delete a file in the original folder.
EDIT: This programs is for people who don't understant a lot of PC's so i don't want to install anything in their pc's. Just want a plain batch file to keep the 2 folders synchronized
SOLUTION: Thanks to Kuba Wyrostek I got to this command
robocopy <Original Folder> <Destination Folder> /e /purge
Thank you all for your time
xcopy has no such option. Your alternatives are:
rsync - http://rsync.samba.org
robocopy - http://technet.microsoft.com/en-us/library/cc733145.aspx
To refine your answer, you can simply do:
robocopy <Original Folder> <Destination Folder> /mir
/mir mirrors a directory tree (equivalent to /e plus /purge).
The XCOPY command for copying the updates from one folder to another is as follows:
C:\> XCOPY C:/SOURCE D:/DESTINATION /E /D /C /Y
The flags used in the above example have the following meanings:
/E causes all folders and sub-folders to be copied
/D causes a DATE comparison to be made, only copying items that are newer than the DESTINATION item. If the DESTINATION is older, or does not contain the file, then it will be copied.
/C tells XCOPY to continue if it encounters an error - typically errors occur with read-only files, or files that have protected permissions
/Y tells XCOPY to suppress prompting you for confirmation, which is necessary if you intend to create an automation script or scheduled task
I know this is old, but I have a question. Can this not be done with the correct xcopy commands.
Folder 1: c:\workingFolder\"contents here"
Folder 2: d:\workingFolderSync\"contents here"
Batch file below
xcopy "c:\workingFolder\*.*" "d:\workingFolderSync\" /i /s /d /y
xcopy "d:\workingFolderSync\*.*" "c:\workingFolder\" /i /s /d /y
pause
( I usually remove the pause after i test and know the batch works. )
But this will only copy contents from the folder to the other if its newer.
Then it looks in the destination folder and copies contents from destination back to source if it is newer. This reproduces what syncing does, except for the in real time monitoring of modified files. Creating a proper task schedule can actually implement running this command at specific times to almost perfectly reproduce syncing. You can also run this before modification on a machine and after modification on a machine. Even doing the same thing on a second machine if your using a network drive to sync.
Your method will have two main problems:
Files deleted from one folder will be reinstated by the copy left in the other folder the next time you run your xcopy
Renaming files can cause chaotic results.

Batch script doesn't function properly

So this is what I have so far. The problem I'm having is it archives the file to 7zip and when I try to tell it to move this file it says it's not there. I'm not sure if there's an easier way to move, zip, and rename a file and move it again to another folder.
#Echo Off
xcopy "\\READYSHARE\USB_Storage\Address Book\Address Book" "C:\Users\Service Department\Desktop\Zip"
7za a –tzip "C:\Users\Service Department\Desktop\ZIpped" "C:\Users\Service Department\Desktop\Zip" /s /e
pause
It is always advisable to read the documentation of the commands to use before creating a batch file.
xcopy (Microsoft Windows XP documenation, easier to read) or xcopy (Microsoft TechNet article)
Documentation for 7-Zip standalone command line tool 7za is installed together with 7-Zip in program files folder of 7-Zip. The file to view is 7-zip.chm, a Windows help file.
The switches /s and /e belong to command xcopy, but are appended to call of 7za. /s is for copying also subdirectories, but not empty subdirectories. /e is for copying also subdirectories including empty subdirectories. It is possible to specify both, but usually just /e needs to be specified to copy a directory tree completely using xcopy.
To recursively archive all files and folders of a folder with 7za the switch -r must be used according to 7-Zip documentation.
#echo off
%SystemRoot%\System32\xcopy.exe "\\READYSHARE\USB_Storage\Address Book\Address Book" "%USERPROFILE%\Desktop\Zip" /E /I
"%ProgramFiles%\7-Zip\7za.exe" a –tzip "%USERPROFILE%\Desktop\Zipped.zip" -r "%USERPROFILE%\Desktop\Zip"
pause
I have not executed this batch file, but it should work if path to 7za.exe is correct on your computer.

How to merge a folder with another folder (with everything in it)

I would like to know how to copy a folder to another folder in a batch file.
I would like stuff with the same name to be overwritten.
Thanks.
Unless I'm missing something, the easiest way is with xcopy (provided you actually mean .bat files on Windows):
xcopy <SOURCE> <DEST> /e /d /y /h /r /c
To explain those flags:
/e: Include directories and sub directories even if empty
/d: Only copy files which have changed on SOURCE more recently than DEST
/y: Suppress prompts
/h: Also copy hidden and system files
/r: Override read-only files (e.g. ignore Read Only flag)
/c: Continue even if there are errors
Source: My standard backup script, been running every day for 6 years.
or take a look at ROBOCOPY en.wikipedia.org/wiki/Robocopy

directory is not empty error

I try in my batch file o delete folder(BR) with many files and subdirectories, I try the following:
if exist C:\BR (
rmdir "C:\BR" /S /q
)
but sometimes I get an error that a specific folder is not empty.these folder contains files of CSS.
what the problem??
rd /s /q DIRNAME
rmdir /s /q DIRNAME
The files that you can't delete are in use.
Close whatever program is holding them open, probably your browser, and try again.
Let me guess, your trying to delete your %TMP% folder.
EDIT: To answer zipi's question.
It will delete every file and folder that it can. So, if c:\tmp\dir2\dir3\open.txt is open, c:\tmp\emptyDir is an empty directory, and you do this:
c:\>dir c:\tmp /b /s
c:\tmp\a.txt
c:\tmp\dir2\b.txt
c:\tmp\dir2\dir3\open.txt
c:\>rd /q /s c:\tmp
c:\>dir /s /b c:\tmp
c:\tmp\dir2\dir3\open.txt
You will have deleted:
c:\tmp\a.txt
c:\tmp\dir2\b.txt
And removed:
c:\tmp\emptyDir
But still have the directories...
c:\tmp
c:\tmp\dir2
c:\tmp\dir2\dir3
...an the file:
c:\tmp\dir2\dir3\open.txt
If instead, a.txt was open, you'd only have:
c:\tmp\
and
c:\tmp\a.txt
On win7 I use a simple bat file to go around the problem:
call :rmdir "my_directory_01"
call :rmdir "my_directory_02"
pause
goto :EOF
:rmdir
if exist %1 rmdir /s /q %1
if exist %1 goto :rmdir
goto :EOF
I had a similar problem. Tried lots of different solutions, but ultimately only the following worked:
rmdir c:\<directory> /s /q
Previously using other methods in CMD I was getting the following:
The directory is not empty.
I had the same issue and the solution is very silly. Please use /Q first and the /S to resolve your issue. so command should be something like:
IF EXIST %build_folder% RD /Q /S %build_folder%
Please let me know if this solves your issue.
Regards
Anuj
To remove directory in command line, you have to remove all of files and subsolders it cointainst at the first place. The problem may occur if some of those items are read-only. /f will try to force delete them.
Try
if exists C:\BR (del "C:\BR" /f /s /q)
Here you have MS docs of the DEL command: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/del.mspx?mfr=true
This worked for me
you will need to go to any drive where the folder is. Then right click on drive > properties > Check Scan disk or scan drive and for windows8 scan and repair
then go back to your folder and delete it
Batch - Getting "The directory is not empty" on rmdir command
In my case the failure to remove a directory using rd /Q /S and getting Directory not empty was down to file permissions. The batch job was doing a backup and removing oldest backup folder at the end to keep latest 10 backups. The normal user account only had read and execute permission on certain files in the sub folders. Running the batch file containing the rd commands under Task Scheduler with a tick in the option "run with highest privileges" enabled directory's to be removed.
You could achieve something similar as a one off if you run your batch file under cmd and choose run as administrator. In Windows 7 type CMD in the Search programs and files box, then right click on cmd.exe at the top of the popup window and click Run as Administrator. Then find and run your batch file in the cmd "black background" window.

Robocopy filter not working?

Hi I'm trying to use robocopy to copy a single file from my computer to another computer over the network. The file I'm going to copy is named setup.exe and the directory it rests in also has a directory called "setup". I only want to copy over the executable, so I tried applying a filter to the robocopy command at the end listing the filename. However, despite the filter, it ends up copying both the executable AND the directory. Apprently robocopy ignores the file extension???
Here is the format of my robocopy command:
robocopy c:\users\ben\desktop /E /Z \\BensRemote\c$\temp setup.exe
so the filter at the end should be preventing the setup directory from also being copied over but it isn't. What am I doing wrong? Is it the /E argument???
The /E argument is what causes the problem.
Drop the /E.
/E will copy over subdirectories, including empty ones. The filter you're applying, 'setup.exe', only refers to files, not folders.

Resources