Board logo

标题: [文本处理] 如何判断txt文本中列出的路径是文件的还是文件夹的? [打印本页]

作者: freesoft00    时间: 2016-4-7 13:39     标题: 如何判断txt文本中列出的路径是文件的还是文件夹的?

本帖最后由 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
作者: CrLf    时间: 2016-4-7 14:12

  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. )
复制代码

作者: codegay    时间: 2016-4-7 14:26

julia内置函数,isfile isdir

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

都很直观。
作者: freesoft00    时间: 2016-4-7 19:55

回复 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
复制代码

作者: happy886rr    时间: 2016-4-7 20:05

  1. @echo off&for /f "delims=" %%a in (test.txt) do (CD "%%a\"&&echo %%a>>22.txt||echo %%a>>11.txt)
复制代码
回复 4# freesoft00
作者: CrLf    时间: 2016-4-7 20:55

回复 5# happy886rr


    没权限也会 cd 失败
作者: happy886rr    时间: 2016-4-7 21:13

回复 6# CrLf
只要不是系统目录就好说,听说Win10新版原生支持Linux Bash命令行。
作者: CrLf    时间: 2016-4-7 21:28

本帖最后由 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
复制代码

作者: freesoft00    时间: 2016-4-7 22:09

本帖最后由 freesoft00 于 2016-4-7 22:14 编辑

回复 5# happy886rr
谢谢!不过和上面的执行结果差不多,也是文件txt中包括目录。
处理的就是系统目录的内容:
只要不是系统目录就好说,听说Win10新版原生支持Linux Bash命令行

作者: freesoft00    时间: 2016-4-7 22:13

回复 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
复制代码
执行胡得到的是两个空文件,没有内容。
而且大招必须要联网才可以,可否有离线就可以处理的?
谢谢!
作者: CrLf    时间: 2016-4-8 00:28

回复 10# freesoft00


    \ 改 \\
作者: freesoft00    时间: 2016-4-8 00:46

回复 11# CrLf


    可以了。但是还是有点问题。
  1. C:\Windows\AppPatch\drvmain.sdb,C:\Windows\AppPatch\sysmain.sdb,C:\Windows\bootstat.dat,C:\Windows\Branding\Basebrd\basebrd.dll,
复制代码
内容变成以逗号分隔的一行文本了。
作者: CrLf    时间: 2016-4-8 01:57

回复 12# freesoft00


    已修改
作者: codegay    时间: 2016-4-8 04:00

  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)
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2