找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34707|回复: 13

[文本处理] 如何判断txt文本中列出的路径是文件的还是文件夹的?

[复制链接]
发表于 2016-4-7 13:39:31 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-4-7 19:47 编辑

一个文本,比如test.txt,内容如下:
需要用for判断哪些是文件哪些是目录,文件输出到11.txt中,文件夹输出到22.txt中,应该如何写?
C:\Windows\addins
C:\Windows\Application Compatibility Scripts
C:\Windows\CSC\v2.0.6\temp
C:\Windows\CSC\v2.0.6\temp\ea-{d9dd67e4-f096-11e4-96f1-e9210b24e1b2}
C:\Windows\debug\PASSWD.LOG
C:\Windows\Downloaded Program Files
C:\Windows\ehome
C:\Windows\explorer.exe
C:\Windows\Fonts\ahronbd.ttf
C:\Windows\Globalization\Sorting\SortDefault.nls
C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelInstallRC.dll
C:\Windows\provisioning
C:\Windows\rescache\rc0003\ResCache.dir
C:\Windows\Resources
C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT{6cced2f1-6e01-11de-8bed-001e0bcd1824}.TM.blf
C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT{6cced2f1-6e01-11de-8bed-001e0bcd1824}.TMContainer00000000000000000001.regtrans-ms
C:\Windows\SysMsiCache
C:\Windows\System32\7B296FB0-376B-497e-B012-9C450E1B7327-5P-1.C7483456-A289-439d-8115-601632D005A0

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-4-7 14:12:35 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=*" %%a in (test.txt) do (
  3.    if exist %%a\nul (echo %%a>>11.txt) else echo %%a>>22.txt
  4. )
复制代码

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2016-4-7 14:26:09 | 显示全部楼层
julia内置函数,isfile isdir

python麻烦点
import os
os.path.isfile
os.path.isdir

都很直观。
 楼主| 发表于 2016-4-7 19:55:42 | 显示全部楼层
回复 2# CrLf
感谢!
22.txt不正确,文件和目录都有,而11.txt正确只有目录
例如22.txt的内容如下:
  1. C:\Windows\ADAM
  2. C:\Windows\Application Compatibility Scripts
  3. C:\Windows\bootstat.dat
  4. C:\Windows\Branding\Basebrd\basebrd.dll
  5. C:\Windows\Cluster
  6. C:\Windows\CSC\v2.0.6\namespace
  7. C:\Windows\CSC\v2.0.6\pq
  8. C:\Windows\CSC\v2.0.6\sm
  9. C:\Windows\CSC\v2.0.6\temp
  10. C:\Windows\CSC\v2.0.6\temp\ea-{d9dd67e4-f096-11e4-96f1-e9210b24e1b2}
  11. C:\Windows\debug\PASSWD.LOG
  12. C:\Windows\ehome
  13. C:\Windows\explorer.exe
  14. C:\Windows\idmu
  15. C:\Windows\MSAgent
  16. C:\Windows\nap
复制代码
发表于 2016-4-7 20:05:52 | 显示全部楼层
  1. @echo off&for /f "delims=" %%a in (test.txt) do (CD "%%a"&&echo %%a>>22.txt||echo %%a>>11.txt)
复制代码
回复 4# freesoft00
发表于 2016-4-7 20:55:39 | 显示全部楼层
回复 5# happy886rr


    没权限也会 cd 失败
发表于 2016-4-7 21:13:52 | 显示全部楼层
回复 6# CrLf
只要不是系统目录就好说,听说Win10新版原生支持Linux Bash命令行。
发表于 2016-4-7 21:28:14 | 显示全部楼层
本帖最后由 CrLf 于 2016-4-8 01:57 编辑

逼我放大招
  1. @mshta http://bathome.net/s/hta/?string type(""J:\SkyIAR_v2.72\ff.txt"").split(/\r\n/).files() >11.txt

  2. @mshta http://bathome.net/s/hta/?string type(""J:\SkyIAR_v2.72\ff.txt"").split(/\r\n/).folders() >22.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 谢谢

查看全部评分

 楼主| 发表于 2016-4-7 22:09:24 | 显示全部楼层
本帖最后由 freesoft00 于 2016-4-7 22:14 编辑

回复 5# happy886rr
谢谢!不过和上面的执行结果差不多,也是文件txt中包括目录。
处理的就是系统目录的内容:
只要不是系统目录就好说,听说Win10新版原生支持Linux Bash命令行
 楼主| 发表于 2016-4-7 22:13:23 | 显示全部楼层
回复 8# CrLf
也不行呀,test.txt我修改为了我的实际路径的文件。
  1. @mshta http://bathome.net/s/hta/ type('J:\SkyIAR_v2.72\ff.txt').split(/\r\n/).files() >J:\SkyIAR_v2.72\11.txt
  2. @mshta http://bathome.net/s/hta/ type('J:\SkyIAR_v2.72\ff.txt').split(/\r\n/).folders() >J:\SkyIAR_v2.72\22.txt
复制代码
执行胡得到的是两个空文件,没有内容。
而且大招必须要联网才可以,可否有离线就可以处理的?
谢谢!
发表于 2016-4-8 00:28:37 | 显示全部楼层
回复 10# freesoft00


    \ 改 \\
 楼主| 发表于 2016-4-8 00:46:50 | 显示全部楼层
回复 11# CrLf


    可以了。但是还是有点问题。
  1. C:\Windows\AppPatch\drvmain.sdb,C:\Windows\AppPatch\sysmain.sdb,C:\Windows\bootstat.dat,C:\Windows\Branding\Basebrd\basebrd.dll,
复制代码
内容变成以逗号分隔的一行文本了。
发表于 2016-4-8 01:57:23 | 显示全部楼层
回复 12# freesoft00


    已修改
发表于 2016-4-8 04:00:36 | 显示全部楼层
  1. """
  2. python判断路径是目录还是文件.py
  3. http://bbs.bathome.net/thread-39957-1-1.html
  4. 2016年4月8日 03:04:00 codegay
  5. """


  6. import os

  7. files=[r for r in open("test.txt") if os.path.isfile(r.strip())]
  8. dirs=[r for r in open("test.txt") if os.path.isdir(r.strip())]

  9. with open("11.txt","w+") as f:
  10.     f.writelines(files)

  11. with open("22.txt","w+") as f:
  12.     f.writelines(dirs)
复制代码

评分

参与人数 2技术 +2 收起 理由
freesoft00 + 1 谢谢
happy886rr + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:35 , Processed in 0.021733 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表