标题: [文件操作] 批处理如何删除大小为0KB的文件? [打印本页]
作者: CGQNET 时间: 2016-4-6 11:27 标题: 批处理如何删除大小为0KB的文件?
在批处理中,如何删除大小为0KB的文件?求各位大侠了。
作者: happy886rr 时间: 2016-4-6 11:34
本帖最后由 happy886rr 于 2016-4-6 13:02 编辑
回复 1# CGQNET - @echo off&for /f "delims=" %%a in ('dir /a-d /b /s') do (if %%~za equ 0 del /f /q "%%a")
复制代码
作者: CrLf 时间: 2016-4-6 12:31
- hash /z::~0 /do:"del ""%%s"""
复制代码
第三方工具 HASH 下载:http://www.bathome.net/s/tool/?key=hash&keymode=4
3.0 以上版本才支持 /do 开关
作者: happy886rr 时间: 2016-4-6 14:01
回复 3# CrLf
大师,我发现批处理可以和C语言混编。利用tcc的-run参数,无需编译成exe直接就能运行,类似C脚本。- /*
-
- @echo off&pushd "%~dp0tcc"&cls
- ren %0 "%~n0.c"&tcc.exe -run "%~dp0%~n0.c"&ren "%~dp0%~n0.c" "%~nx0"
- pause>nul
- exit
-
- */
-
- #include <stdio.h>
- main()
- {
- printf("It woeks!");
- return 0;
- }
复制代码
作者: CrLf 时间: 2016-4-6 18:35
回复 4# happy886rr
作者: pcl_test 时间: 2016-4-6 20:36
回复 4# happy886rr
这种注释屏蔽法只要其他语言的代码解释器支持命令行模式且其注释与批处理的不冲突,基本上都可以跟批处理混编的
作者: pcl_test 时间: 2016-4-6 21:02
- forfiles /m *.* /c "cmd /c if @fsize==0 del @file"
复制代码
作者: happy886rr 时间: 2016-4-6 22:05
回复 6# pcl_test
这个主要是模拟不编译C文件,就运行,居然也成功,可能是tcc在内存里编译了吧。这样实际效果等同于脚本语言,只是tcc库少了许多,毕竟体积才200k多。
作者: CGQNET 时间: 2016-4-20 10:10
谢谢诸位大侠!
作者: CGQNET 时间: 2016-4-23 14:27
回复 2# happy886rr
此法可能还不够完美,我尝试建立几个空的.txt文件(文件属性显示是0KB),一个改名为.ppt,另一个改名为.doc。执行代码:
@echo off
FOR /f "delims=" %%a IN ('dir *.ppt /s /a /b') DO (if %%~za equ 0 DEL /f /s /q "%%a")
FOR /f "delims=" %%b IN ('dir *.doc /s /a /b' ) DO (if %%~za equ 0 DEL /f /s /q "%%b")
pause
结果看到,第一行执行正常(能删),但第二语句不能执行,找不到原因,求大侠了!
作者: CGQNET 时间: 2016-4-23 14:30
回复 3# CrLf
hash 是好东西,但它只能删除当前目录的0KB文件,深层文件夹的0KB文件就不行了。
作者: CrLf 时间: 2016-4-23 18:04
回复 11# CGQNET
加 /s 开关即可
作者: 再世情緣 时间: 2016-4-23 21:29
本帖最后由 再世情緣 于 2016-4-23 21:30 编辑
回复 10# CGQNET
你那第二行有个变量名错了
FOR /f "delims=" %%b IN ('dir *.doc /s /a /b' ) DO (if %%~za equ 0 DEL /f /s /q "%%b")
应该是- FOR /f "delims=" %%b IN ('dir *.doc /s /a /b' ) DO (if %%~zb equ 0 DEL /f /s /q "%%b")
复制代码
或者你可以写在一起- FOR /f "delims=" %%a IN ('dir *.doc *.txt /s /a /b 2^>nul' ) DO (if %%~za equ 0 DEL /f /s /q "%%~fa")
复制代码
作者: CGQNET 时间: 2016-4-24 13:20
问题已经解决,谢谢!
作者: CGQNET 时间: 2016-4-24 13:24
回复 12# CrLf
我已加了开关,如下
hash /z::~0 /do:"del ""%%s"" /s"
好像不行,请赐教,谢谢!
作者: CrLf 时间: 2016-4-24 15:01
回复 15# CGQNET
卧槽!敢这么写也是心够大…- hash /s /z::~0 /do:"echo del ""%%s"""
- pause
复制代码
危险操作,请确认无误后把 echo 去掉再执行
作者: codegay 时间: 2016-4-24 17:13
回复 16# CrLf
哈哈,应该先备份一下再操作。
前几天我信心爆棚地删删删删删删删删。。也不知道删了啥东西,现在系统死了几天现在也没能恢复过来。
作者: Nsqs 时间: 2016-4-24 17:22
本帖最后由 Nsqs 于 2016-4-24 17:25 编辑
关于0kb删除- @echo off&setlocal enabledelayedexpansion
- :return
- set/a n=-1,p=-1,cc=0
- for /f "delims=" %%1 in ('dir/s/b/a-d')do (
- if %%~z1 equ 0 (
- set/a p+=1
- set f!p!=%%1
- set s!p!=%%~nx1
- if !n! lss 9 set /a n+=1&call echo [!n!]%%~nx1
- ))
- set c=-1
- :select
- echo 输入u表示上一页;l表示下一页;
- set /p input=输入要删除的编号(A表示全部删除;[0-9]表示删除第n项;s表示删除10个):
- if /i "%input%"=="s" call:_N
- if /i "%input%"=="a" call:_all
- if /i "%input%"=="u" set/a cc-=1, c=cc*10&call:_U
- if /i "%input%"=="l" set/a cc+=1, c=cc*10&call:_L
- if /i "%input%"=="q" exit
- echo %input%|findstr "[0-9]" >nul 2>nul
- if %errorlevel%==0 set /a c=cc*10,ss=-1&call:_del
- goto select
-
- :_all
- cls&(for /l %%1 in (0 1 %p%)do set "s%%1="&del !f%%1!&set "f%%1=")2>nul&goto :eof
- :_U
- cls&if %c% lss 0 set/a c=0,cc=0
- for /l %%1 in (0 1 9)do (set/a z=c+%%1
- call set x$=%%s!z!%%
- if not !x$!#==# echo [%%1]!x$!)
- goto :eof
- :_L
- cls&if %c% gtr %p% set/a c=c-10,cc-=1
- for /l %%1 in (0 1 9)do (
- set/a z=c+%%1
- call set x$=%%s!z!%%
- if not !x$!#==# echo [%%1]!x$!
- )
- goto :eof
-
- :_del
- cls&set/a ss+=1,r=0&set x$=!input:~%ss%,1!
- if not !x$!#==# (
- set/a r=c+!x$!
- call del %%f!r!%%
- goto _del
- )
- call:return
- goto :eof
- :_N
- cls&for /l %%1 in (0 1 10)do (
- set/a z=c+%%1
- call set x$=%%f!z!%%
- if not !x$!#==# del !x$!
- )
- call:return
- goto :eof
复制代码
作者: CrLf 时间: 2016-4-24 19:22
回复 17# codegay
绝不告诉你我小时候在别人电脑上玩游戏,嫌文件太多找着麻烦,于是把除了 exe 以外的所有文件都删掉
作者: happy886rr 时间: 2016-4-24 19:51
本帖最后由 happy886rr 于 2016-4-24 19:52 编辑
回复 17# codegay
用wimboot,或者差分vhd,系统文件都是指针,或者用RAM系统。
作者: codegay 时间: 2016-4-24 21:12
回复 20# happy886rr
好的,感谢。以前都没听说过。以后再找时间来玩。
作者: happy886rr 时间: 2016-4-24 21:25
回复 21# codegay
可以把指针索引释放到内存条里,这样系统的原始文件在ssd上,索引在内存里,可以有接近内存的响应速度。我以前把win7系统全部跑在内存里,连硬盘,ssd都不需要,只需要个大内存条。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |