[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 18# qixiaobin0715



1
感谢大神!

TOP

回复 12# smss Batcher qixiaobin0715



1
感谢大神!


2
if not "%%~nxi"=="%~nx0" (set /a n+=1
if "!n!"=="1" set L=%%i
set J=%%i
这句是什么意思?
若列举的第一个文件不是批处理文件本身,就开始计数。
第一个非批处理文件本身的要处理的文件,交给变量L,接着又交给变量J。这里是省了else吗?
没看懂其中的逻辑,能解释一下吗?


3
第2个for命令,不是!L!,不是!J!,就del?
没看懂其中的逻辑,能解释一下吗?


4
其他大神,有看懂了的吗?能帮忙解释一下吗?

TOP

回复 18# qixiaobin0715



1
大神好!感谢!


2
你之前的那个代码,
第1个for命令,把第3到第10个txt文件名存入1.log里。
第2个for命令,把第8到第1个txt文件名存入2.log里。
第3个for命令,用1.log里的行分别查找2.log里的行,取了交集,再交给%%i,去do,去del。
之前,是鄙人理解错误了!


3
只排除最前2个,或最后2个而删其它文件的解法,鄙人已有了。
感谢提示。


4
type命令输出的结果,可以用管道给其它命令做输入吗?


5
用for /f命令,可以做到,只读取第n行,而忽略其它行吗?

TOP

回复 19# qixiaobin0715


1
感谢大神出手相教!
鄙人后来也想出了这个解法,现已测试,可用了。
谢谢!

TOP

回复 20# Batcher



1
感谢坛主出手相教!
谢谢!

TOP

回复 17# smatenchen


%%~nxi的用法,参考for命令教程第6页:
http://bbs.bathome.net/thread-31727-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

保留前面2个txt文件,删除其余txt文件:
  1. for /f "skip=2 delims=" %%i in ('dir /b /a-d *.txt') do del "%%i"
复制代码
保留后面2个txt文件,删除其余txt文件:
  1. for /f "skip=2 delims=" %%i in ('dir /b /a-d *.txt^|sort /r') do del "%%i"
复制代码

TOP

回复 10# smatenchen
代码发上去之后,看楼主没有回应,我想可能对楼主的需求理解错误,所以就将原贴删除了,并且也未留下备份。
代码的主要思路是:
1.前2个for循环利用skip,分别忽略前n个txt文件将其余txt文件名保存在1.log中,忽略后n个txt文件将其余txt文件名保存在2.log中;
2.第3个for循环是利用findstr命令取2个log文件中交集(而非并集),即取掐头去尾后位于中间的txt文件名,利用del命令删除这些文件。
关于楼主几点疑问的回复:
1.此处确实可以不使用变量延迟功能;
2.至于是否会把所有txt文件全部删除,这里不用争论,因为这是一个实践性非常强的知识,试一试即知。并且在上面思路的第2点已经说的很清楚了。
3.我觉得楼主对重定向命令理解是浮在表面。在这里可以举个简单的例子,如果用我上面的代码不好理解,我将for循环中能够显示的内容拆分开来,可能看的较为明白,自己去测试一下:
  1. (
  2. echo,1
  3. echo,2
  4. echo,3
  5. echo,4
  6. echo,5
  7. )>a.txt
复制代码
看看a.txt里的内容是什么?
把上面代码括号中的多行替换成:
  1. (
  2. for /l %%a in (1,1,5) do (
  3. echo,%%a
  4. )
  5. )>a.txt
复制代码
看看2段代码是不是等价的?

TOP

回复 11# smss


   1
先感谢大神出手相助。


2
请教,
%%~nxi,这是一种什么变量?请详教一下。


3
条件,
假定某文件夹里有一大堆文件,不知道其文件数量和文件名,因为这个文件夹里的文件
是会每天增加的,新文件名也是会不断依序出现的。
所以,用去比较文件名的解法,是行不通的。

TOP

回复 13# arwind


请到站务版块单独发个帖子吧
http://bbs.bathome.net/forumdisplay.php?fid=40

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# arwind


   

TOP

回复 12# smss


   1
大神,
可以解释一下你的for命令里,各条语句的具体含义吗?
鄙人实在是看不太懂。
谢谢!

TOP

回复 2# Batcher


   论坛有点问题发不了新贴了,分类无论选什么点发新话题都提示:您没有输入标题或内容,请返回填写。
尝试过chrome和firefox都是。。

TOP

假定按名称排列
  1. @Echo off&SetLocal EnableDelayedExpansion&set n=0
  2. for /r %%i in (*)do (
  3. if not "%%~nxi"=="%~nx0" (set /a n+=1
  4. if "!n!"=="1" set L=%%i
  5. set J=%%i
  6. )
  7. )
  8. for /r %%i in (*)do if not "%%~nxi"=="%~nx0" if not "%%i"=="!L!" if not "%%i"=="!J!" del/s/q "%%i"
  9. pause
复制代码

TOP

假定最前文件叫张三 最后文件叫李四
  1. @Echo off
  2. for /r %%i in (*)do if not "%%~nxi"=="%~nx0" if not "%%~nxi"=="张三.txt" if not "%%~nxi"=="李四.png" del/s/q "%%i"
  3. pause
复制代码

TOP

返回列表