Computer Hope
Microsoft => Microsoft DOS => Topic started by: ionic on January 22, 2008, 06:09:33 PM
-
I'd like to do 2 things with this batch file:
1) either rename a specific to a random name (example: qpwo.xyz)
if this can not be done then to a specific name. xxxx.xxx
then:
2) delete the file.
In the end I'd like to drag-n-drop a file abc.def onto a shortcut and have it rename
abc.def to qlsybc.fhw and then delete qlsybc.fhw.
any help would be appreciated.
-
Your first part could be solved by
ren %1 %RANDOM%.%RANDOM%
now, why on earth do you want to rename a file, then delete it ? why not just delete it in the first place ?
Graham
-
My guess would be it's a file he doesn't have full permission to delete...
But i've been wrong before.
-
Why on earth would I want to rename a file then delete it. Fir example if I had a file called finance.xml and I deleted it to the recycle bin it would still be recoverable, and it could have obvious value to someone trying to hijack personal information. But if I rename it to something meaningless then delete it. those snoops would look elsewhere for important documents.
Nope, not trying to delete anything I do not or should not have access to.
-
Using the following code I get:
ren %1 %RANDOM%.%RANDOM%
sdelete -p 12 -s %1
exit
The fie was renamed to some random file name but this file remained on the system while the original file was deleted,
-
In that case, you need to store the new filename first
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
sdelete -p 12 -s %newname%
exit
I like your thinking, however, unless you have a third-party app installed, when you delete using the batch Del command, they do not appear in the recycle bin, they are gone - which has caused me some grief over the years !!
Graham
-
Guys, just reading through the tread ...
What is `sdelete` and from what tool box can it sought from ??
Cheers,
Cameron
-
CameronY,
SDelete.exe is command line file that is capable of secure fle deletion. The company that offered it, Sysinternals, no longer exist as it was bought out by microsoft. The only link I can find for downloading it is here:
http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx
Other usefull info I just found on it can be found here:
http://forum.sysinternals.com/forum_posts.asp?TID=6065&PN=1
gpl,
Thanks for the simple, but crucial code. The code you provided I will be setting up in the right-click contex menu for single file deletion. In terms of batch mode I'd have to know and list every file that I would want to delete in a batch file, which gets quite complicated.
--------------------------------------------------------------
after running the new batch file I received the following error:
SDelete is set for 12 passes. - (Not a problem)
No files found that match 29517.1883. - (Clueless here!)
In other words the random rename works.
the file 29517.1883 does exist in the same location as the original file
but sdelete did not delete the file.
Could it be that the sdelete operation is trying to delete before the file has been renamed?
Not sure....
-----------------------------------------------------------------
Nope, not a timing issue. Maybe sdelete.exe is not recognizing the variable, 'newname'.
Nothing ever comes easy dose it?
-
There is something fundamentally wrong with this code.
@echo off
ren %1 %RANDOM%.%RANDOM%
DEL %1
exit
The renamed file can not be Deleted using Sdelete.exe, DEL, ERASE
The file renaming works fine, but the del, erase...etc. does nothing
Any ideas why?
-
You're trying to delete the file that you just renamed! The earlier post by GPL had it right:
@echo off
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %newname%
exit
A suggestion: leave echo on while debugging. It will give you some insight into how your file is executing.
8)
-
OK,
Here is the code I used:
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %newname%
pause
exit
...and here is reply I received:
C:\donume~1\User\>Set newname=15624.19141
C:\donume~1\User\>ren "C:\donume~1\User\desktop\test.txt" 15624.19141
C:\donume~1\User\>DEL 15624.19141
Could Not Find C:\donume~1\User\>15624.19141
Conclusion: If the file "test.txt" and the batch file are located on the User desktop, why does DOS
lose this positioning and look to delete the file in a directory above the originating directory?
The renamed file does indeed replace the test.txt file in the same location, on the desktop.
Do I need to set the initial DIR... cd %1 or something to that effect?? Disregaard, this tries sets the dir
as test.txt.
-
why does DOS
lose this positioning and look to delete the file in a directory above the originating directory
You were never in the desktop directory, you only pointed to it. The command window defaults to %homedrive%%homepath% when opened unless overridden. That would be C:\donume~1\User\ in your case. The set statement ran because it contains no path pointers. The ren statement ran because the %1 parameter included a fully qualified file name. You were in one directory but pointed the command parameters to another where it found the file and renamed it. The del failed because the file is not in C:\donume~1\User\ but in C:\donume~1\User\desktop\ and there are is no path pointer to the file in which case the current directory applies: C:\donume~1\User\
cd C:\donume~1\User\desktop
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %newname%
pause
exit
The example above logs on to the correct directory. An added benefit is that you need only pass test.txt on the command line.
It's a lot easier if you run batch files from the command line rather than Windows. 8)
-
If the SET command knows the full path to the file being deleted and
the REN command knows the full path, why does the DEL command fail to
recognize the full path to the file.
The new code changes nothing really. One would have to redirect the directory
manually every time you ran the bat file from a different location. Thus if I were to
drag a file to be deleted onto a shortcut to the bat file, how can it automatically lock in
the target path for all action to take place...regardless of where the source file is located?
However since I was intending to use sdelete.exe as the final command instead of DEL
I just found out that deleting with sdelete renames the shredded file as ZZZZ.ZZZ in place
of test.txt.
This is the current code using sdelete.exe
@echo off
:: The (%*) allows for multiple directories and files to be deleted recursivly.
FOR %%F IN (%*) DO ECHO Y| cacls %%F /T /C /G Administrators:F
:Set proper attributes for directories
FOR %%F IN (%*) DO attrib -h -s -r -a %%F /S /D
:Set proper attributes for files
FOR %%F IN (%*) DO attrib -h -s -r -a %1\*.* /S /D
FOR %%F IN (%*) DO sdelete -p 12 -s -q %%F
I still would like to understand how to correct this in a bat file can accomplish this.
-
One would have to redirect the directory manually every time you ran the bat file from a different location
Yes indeed, unless the code was generic (see below)
If the SET command knows the full path to the file being deleted
Set newname=15624.19141
It doesn't; it sets a variable to a string; might be a file name; definitely not an included path
the REN command knows the full path
ren "C:\donume~1\User\desktop\test.txt" 15624.19141
The %1 referenced in the ren command parameters included a path pointer
why does the DEL command fail to recognize the full path to the file.
DEL 15624.19141
%1 is not referenced in the del command parameters
This is generic enough based on your latest request:
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %~d1%~p1%newname%
pause
exit
Concerning your latest edit:
@echo off
:: The (%*) allows for multiple directories and files to be deleted recursivly.
FOR %%F IN (%*) DO ECHO Y| cacls %%F /T /C /G Administrators:F
:Set proper attributes for directories
FOR %%F IN (%*) DO attrib -h -s -r -a %%F /S /D
:Set proper attributes for files
FOR %%F IN (%*) DO attrib -h -s -r -a %1\*.* /S /D
FOR %%F IN (%*) DO sdelete -p 12 -s -q %%F
I still would like to understand how to correct this in a bat file can accomplish this
Does not the above code work? Could you re-phrase your question?
-
Concerning your latest edit:
Code:
@echo off
:: The (%*) allows for multiple directories and files to be deleted recursivly.
FOR %%F IN (%*) DO ECHO Y| cacls %%F /T /C /G Administrators:F
:Set proper attributes for directories
FOR %%F IN (%*) DO attrib -h -s -r -a %%F /S /D
:Set proper attributes for files
FOR %%F IN (%*) DO attrib -h -s -r -a %1\*.* /S /D
FOR %%F IN (%*) DO sdelete -p 12 -s -q %%F
I still would like to understand how to correct this in a bat file can accomplish this.
Does not the above code work? Could you re-phrase your question?
I worded that wrong, my apologies. The above "sdelete" code does work. It was the previous code
that did not work for which you explained and wrote new code seen below:
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %~d1%~p1%newname%
pause
exit
After reading your explanation and seeing the new code I had complete confidence that it too would work
just fine, but it did not. When I sent the test.txt to the shortcut to the new code this is what I got in return.
c:\docume~1\user>Set newname=725.23907
c:\docume~1\user>ren "C:\docume~!\user\desktop\test.txt 725.23907
c:\docume~1\user>DEL C:\docume~1\user\desktop\725.23907
The system cannot find the file specified.
The DEL command seems to have found the right path this tim with the addition of the %~d1%~p1
, but an error was still geteratted stating that it could not be found.
Now this is getting really strange! I do appreciate the time you've taken to explain this to me.
-
Sorry if I seem annoying or anything... but I'm sure that
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
Del %newname%
pause
exit
works... it just worked for me.
I ran it from cmd.exe, if that makes a difference...
-
c:\docume~1\user>Set newname=725.23907
c:\docume~1\user>ren "C:\docume~!\user\desktop\test.txt 725.23907
c:\docume~1\user>DEL C:\docume~1\user\desktop\725.23907
The system cannot find the file specified.
I'm assuming the yellow highlight is a typo, but where did the leading quote on that same line come from? There doesn't appear to be a trailing quote.
I do not have any explanation. After all the code is extracting existing data; it's not creating anything new. Try not using quotes on the passed parameter, you're using short names anyway so they're not required.
It's unlikely but not unheard of the write cache hasn't emptied out and the file index was not yet updated by the rename. My guess it's something more obvious. ???
-
First off, I think the code we were last working with was:
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %~d1%~p1%newname%
pause
exit
and the info I received in a DOS window with echo on was:
c:\Documents and Settings\user>Set newname=725.23907
c:\Documents and Settings\user>ren "C:\Documents and Settings\user\desktop\test.txt" 725.23907
c:\Documents and Settings\user>DEL C:\Documents and Settings\user\desktop\725.23907
The system cannot find the file specified.
They were indeed my typo's. Retying all the info from the dos window gets annoying, i used shout names
to shorten what I had to type.
Try not using quotes on the passed parameter, you're using short names anyway so they're not required.
All I am doing is dragging the file I want deleted to the shortcut to the batch file, the quotes on the passed parameters is what DOS spits out as an echo to the commands in the batch file.
THUS:
cmd = Set newname=%RANDOM%.%RANDOM%
echo = D:\Documents and Settings\user>Set newname=725.23907
cmd = ren %1 %newname%
echo = C:\Documents and Settings\user>ren "C:\Documents and Settings\user\desktop\test.txt" 725.23907
cmd = DEL %~d1%~p1%newname%
echo = C:\Documents and Settings\user>DEL C:\Documents and Settings\user\desktop\725.23907
The system cannot find the file specified.
What's interesting is that when the REN cmd is issued the echo uses qoutes on the parameters while when the DEL cmd is issued it does not.
Bones92,
I ran it from cmd.exe, if that makes a difference...
Not sure what you mean here, does cmd.exe need to be called from within a batch file? Or ae you saying you types cmd,exe in the run field to open a DOS window? I believe the dos batch file does use cmd.exe for exicution.
-
Well at least we're on the same page: ;)
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL %~d1%~p1%newname%
pause
exit
All I am doing is dragging the file I want deleted to the shortcut to the batch file
That information would have been helpful from the beginning especially i used shout names to shorten what I had to type.
Please read this. (http://www.computerhope.com/forum/index.php/topic,33323.0.html)
A quick fix would be to insert the quotes regardless of short or long file names:
Set newname=%RANDOM%.%RANDOM%
ren %1 %newname%
DEL "%~d1%~p1%newname%"
pause
exit
8)
When Windows 3000 arrives it will probably still support batch code. :o
-
OH Sweet Jesus! That's it!
Can all the DOS echo responses be piped to a single txt file? For future debugging this would be helpful .
Beautiful job, wish I could have saved us some time, but I am sorta new with this stuff.
Thanks for your efforts
When Windows 3000 arrives it will probably still support batch code.
Don't plan on sticking around to find out! :o
-
Yeah it seems the only way it will keep a log of its self is if u put an output code (echo %whatever% >> log.txt) and if u click on batch file rather than just drag and drop, but then it only keeps a log of the click, nothing is deleted. Oh and I was wondering how to change it to where it uses the files actual name as a variable apposed to renaming it to random numbers?
-
DragonMaster,
I was wondering how to change it to where it uses the files actual name as a variable apposed to renaming it to random numbers?
I'm a bit perplexed as to why you would want to do that???
I think this might work though:
Set newname=%1
DEL %newname%
exit
-
Yeah that worked lol, thanks Ionic!