Board logo

标题: [文件操作] [已解决]BAT批处理获取畸形目录的短文件名 [打印本页]

作者: wwjpl    时间: 2014-1-3 08:44     标题: [已解决]BAT批处理获取畸形目录的短文件名

我知道在CMD下可以用DIR /X获取包括畸形目录的短文件夹名。
那么如何用批处理获取任意不超过6个字符的畸形目录的短文件夹名(拖拽显示),并且输出到文本呢,例如A..\,或者12..\
希望得到论坛高手的帮助,谢谢
作者: apang    时间: 2014-1-3 18:11

这样可以不?
  1. @echo off
  2. for /f "tokens=4*" %%a in ('dir /ad /x') do (
  3.     if /i "%%b"=="A.." echo,%%a
  4. )
  5. pause
复制代码

作者: wwjpl    时间: 2014-1-3 22:45

本帖最后由 wwjpl 于 2014-1-3 22:46 编辑

回复 2# apang


    感谢你的帮助,这样不行,把文件夹拖到批处理图标上没反应,双击也没反应,只出现了“按任意建继续”的提示
不论是我建的A..文件夹还是其他畸形文件夹都没反应,我把“echo,%%a”中间的“逗号”改成空格也没反应。
希望你再帮忙看看,最好是支持拖拽的
顺便说一下 我是XP系统
作者: apang    时间: 2014-1-4 11:43

  1. @echo off
  2. if "%~1"=="" echo,把畸形目录拖拽到bat上&pause&exit /b
  3. for /f "tokens=4*" %%a in ('dir /ad /x "%~1\..\"') do (
  4.     for %%c in ("%~1$") do if /i "%%b$"=="%%~nxc" echo,%%a
  5. )
  6. pause
复制代码

作者: wwjpl    时间: 2014-1-4 13:02

回复 4# apang


    谢谢你的帮助,这次可以了。
作者: oiw    时间: 2014-10-14 16:10

回复 4# apang


您好,我的系統是Windows7,試了上面您寫的兩份指令,拖曳畸形目錄後,執行結果都只有顯示「請按任意鍵繼續 . . .」而已,依然沒有得到它的短目錄名,
請問是不是Windows7的執行結果有不一樣呢?
作者: apang    时间: 2014-10-14 18:14

回复 6# oiw


    dir /ad /x
执行后第4列为短文件名,第5列为长文件名,看看你的结果是这样不
作者: oiw    时间: 2014-10-14 21:57

回复 7# apang

有,第4列顯示短文件名、第5列顯示長文件名

這是拖曳的過程

只有顯示「請按任意鍵繼續 . . .」

代碼沒有變動到

您知道問題是出在什麼地方嗎?
作者: apang    时间: 2014-10-14 23:08

回复 8# oiw


   
d:\Test>dir /ad /x
驱动器 D 中的卷是 PROGRAM
卷的序列号是 CB34-5A7B

d:\Test 的目录

2013/10/29  21:29    <DIR>                       .
2013/10/29  21:29    <DIR>                       ..
2013/01/15  19:23    <DIR>                       abc
2014/10/14  22:43    <DIR>          TEST~1       Test..
2014/10/14  22:46    <DIR>          TEST1~1      Test 1..
               0 个文件              0 字节
               5 个目录 19,410,436,096 可用字节

d:\Test>


你的时间格式多出上午和下午,短文件名位于第5列
解决办法:
1.把代码中的 tokens=4* 改成 tokens=5*
2.下面的代码,多用一层for,但应该可以两者兼顾:
  1. @echo off
  2. if "%~1"=="" echo,把畸形目录拖拽到bat上&pause&exit /b
  3. for /f "tokens=2delims=>" %%i in ('dir /ad /x "%~1\..\"') do (
  4.     for /f "tokens=1*" %%a in ("%%i") do (
  5.         for %%c in ("%~1$") do if /i "%%b$"=="%%~nxc" echo,%%a
  6.     )
  7. )
  8. pause
复制代码

作者: oiw    时间: 2014-10-15 10:46

回复 9# apang

謝謝你,成功取得目錄名稱,這下可以進行許多細節的操作了 ^^




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