Board logo

标题: 【已解决】删除批处理所在目录的大难题 [打印本页]

作者: heicai     时间: 2007-4-17 22:45    标题: 【已解决】删除批处理所在目录的大难题

例如批处理del.bat文件在C:\Documents and Settings\Administrator\桌面\Bat\目录下。

我想删除Bat文件夹与其自身del.bat文件。

因为del.bat自身在运行所以无法删除该文件夹。哎

不知是否有牛人能帮其实现!


____________________以上已解决—————————————————



 

[ Last edited by heicai on 2007-4-17 at 01:46 PM ]
作者: flyinspace     时间: 2007-4-17 23:33
方法是可以乱来的。

不一定要局限于在本地建立文件。

可以在临时文件建立一个新的del文件啊。

内容如下:
cscript /nologo delay.vbs
rd /s /q "C:\Documents and Settings\Administrator\桌面\Bat"
del %0
在del文件中最后添加如下语句
echo WSCRIPT.sleep(5000)>delay.vbs
start %tmp%\del.bat
作者: bw070     时间: 2007-4-18 00:14
以d:/1为例 你那个太长了我就不大了  ; )

@echo off
echo rmdir D:\1 /s /q >c:\1.bat
echo del c:\1.bat >>c:\1.bat
echo Windows Registry Editor Version 5.00>r.dll
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]>>r.dll
echo "Del"="C:\\1.bat">>r.dll
regedit -s r.dll
echo ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
echo ★                                        ☆
echo ☆     文件夹在重新启动或者注销后删除!    ★
echo ★    ---------任意键退出!!----------     ☆
echo ☆                                        ★
echo ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
pause
del r.dll
del d:\1\1.bat

见笑了 没有想出来立即删除那个正在运行的文件夹 不过想出个办法在注销或重新启动后彻底删除所有产生文件和目标文件夹

[ Last edited by bw070 on 2007-4-17 at 11:19 AM ]
作者: everest79     时间: 2007-4-18 00:34
终止了explorer进程再删
作者: flyinspace     时间: 2007-4-18 01:07
我寒,有简单的方法都不用,

全部都用好复杂的方法。
作者: heicai     时间: 2007-4-18 01:12


  Quote:
Originally posted by flyinspace at 2007-4-17 10:33 AM:
方法是可以乱来的。

不一定要局限于在本地建立文件。

可以在临时文件建立一个新的del文件啊。

内容如下:
cscript /nologo delay.vbs
rd /s /q "C: ...

谢谢你的方法。我试了很好用!

不过我还有个问题,假如bat文件夹假如是随机不定的名称,有办法获取到此文件夹名称吗?
作者: flyinspace     时间: 2007-4-18 01:16
有是有,
不过最少要知道这个文件夹所在的地方吧?

要不一下子找出有许多bat文件的文件夹然后你一下全删完。不是要郁闷死了么。

或知道要删除的bat的文件名。。所在盘符也行。

不过。。。若多余一个,还是需要人工判断。。
作者: everest79     时间: 2007-4-18 01:19
批处理所在目录为"%~dp0"
作者: heicai     时间: 2007-4-18 01:20
我要实现的功能是这样的:
先将bat文件夹分别复制到桌面的a1,b2,c3,d4,haha,test,temp,……等等这些各个文件夹内。然后做一些工作后将它们文件夹全部删除。

C:\Documents and Settings\Administrator\桌面\temp\
要是能获取temp这个位置的文件夹设为一个环境变量就好了。不知道如何能截到这部分文件夹名称
作者: everest79     时间: 2007-4-18 01:25
你在讲述你要求是最好先整理下思路,这样大家也好帮你,你复制到各个目录下的工作是由脚本还是手工来完成的?若脚本,你在此时即可建立删除列表;你复制完成后各目录执行的操作是手工启动还是由先前的复制脚本启动,若是脚本启动,那么,你前边的删除列表可以是以变量形式存在的,再下来就是你的删除要求,是最后一次性删除还是按工作顺序逐个删除,若是按工作顺序,那我前边讲的基本上没用,嘿嘿
作者: flyinspace     时间: 2007-4-18 01:27
set 查看环境变量的地方。。

里面好象有你需要的东西。。。。你的意思我不太清楚。
作者: heicai     时间: 2007-4-18 01:30


  Quote:
Originally posted by everest79 at 2007-4-17 12:25 PM:
你在讲述你要求是最好先整理下思路,这样大家也好帮你,你复制到各个目录下的工作是由脚本还是手工来完成的?若脚本,你在此时即可建立删除列 ...

每个文件夹下的批处理都是点击后删除那个文件夹。
作者: everest79     时间: 2007-4-18 01:35
那问题回到第8楼,你结合第二楼的方法来完成,你可以将"%~dp0"当作参数来启动del.bat
作者: heicai     时间: 2007-4-18 01:41
对论坛内帖子进行考古后终于找到了答案!同时也万分感谢回答我问题的这些朋友,由于我等级低,今天的加分满了,不好意思
@echo off
for %%p in ("%cd%") do set temp=%%~nxp
echo %temp%
pause
就是不知道%%~nxp 这个是什么意思?

[ Last edited by heicai on 2007-4-17 at 12:42 PM ]
作者: flyinspace     时间: 2007-4-18 01:45
其实我觉得10楼的方法就很不错。。

rem 建立复制,删除列表,给一个例子。
echo %userprofile%\桌面\temp>>del.txt
::……你自己写完这个列表。
for /f "tokens=* " %%i in (del.txt) do (
rem 防止误删除文件
        if exist "%%i"  (
                xcopy “你的文件” “%%i”
               start “%%i\文件名"
                )
        )
for /f "tokens=* " %%i in (del.txt) do (
              dir /b /s "%%i" | find /i "你复制的文件"
              if not errorlevel 1 echo  "%%i\你复制的文件"
              )
本脚本未经过调试,实际使用时,若最后一句的echo 正确则可以改为rd /s /q
作者: heicai     时间: 2007-4-18 02:20

@echo off
set ml=%cd%
echo ping 127.1 -n 4 >%temp%\del.bat
echo rd /s /q "%ml%">>%temp%\del.bat

start %tmp%\del.bat
del %0
这段代码哪有问题,仍然提示有进程在运行无法删除。郁闷了
作者: flyinspace     时间: 2007-4-18 02:25
del %0

这一句后面不要回车就可以。
作者: heicai     时间: 2007-4-18 02:26
试了2楼的方法。不行。晕
作者: heicai     时间: 2007-4-18 02:28
因为这段代码是在BAT目录的一个批处理,他在运行就没法被删啊。郁闷

@echo off
set ml=%cd%
echo ping 127.1 -n 4 >%temp%\del.bat
echo rd /s /q "%ml%">>%temp%\del.bat

start %tmp%\del.bat
del %0
作者: flyinspace     时间: 2007-4-18 02:28
概念还没有弄懂就乱来。当然啦。
作者: heicai     时间: 2007-4-18 02:35


  Quote:
Originally posted by flyinspace at 2007-4-17 01:28 PM:
概念还没有弄懂就乱来。当然啦。

怎么说。
作者: heicai     时间: 2007-4-18 02:45
解决了。代码改为这样就可以了。


@echo off
set ml=%cd%
echo ping 127.1 -n 4 >%temp%\del.bat
echo rd /s /q "%ml%">>%temp%\del.bat
cd..
start %tmp%\del.bat
del %0
作者: htysm     时间: 2007-4-18 04:39
这样就生成垃圾文件了,应该再加一句:
echo del /q "%temp%\del.bat" >> %temp%\del.bat
作者: SunRiseBoy     时间: 2007-6-29 00:30
@echo off
set ml=%cd%
echo ping 127.1 -n 4 >%temp%\del.bat
echo rd /s /q "%ml%">>%temp%\del.bat
cd..
start %tmp%\del.bat
del %0
echo del /q "%temp%\del.bat" >> %temp%\del.bat

经典功能的批处理啊,怎么也明白删除echo ping 127.1 -n 4 >%temp%\del.bat这一行运行还是有ping的过程,郁闷,不用ping不行吗?
作者: moniuming     时间: 2008-1-26 16:11
在坛子里摸到的,最牛了,因为批处理本身正在运行,所以要先退出当前目录才能删除,怎一个纟色字了得!
cd\&rd /s /q "%~dp0"