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

[文件操作] [已解决]BAT批处理获取畸形目录的短文件名

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 9# apang

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

TOP

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

评分人数

    • oiw: 很清楚的說明,謝謝。技术 + 1

TOP

回复 7# apang

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

這是拖曳的過程

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

代碼沒有變動到

您知道問題是出在什麼地方嗎?

TOP

回复 6# oiw


    dir /ad /x
执行后第4列为短文件名,第5列为长文件名,看看你的结果是这样不

TOP

回复 4# apang


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

TOP

回复 4# apang


    谢谢你的帮助,这次可以了。

TOP

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

评分人数

    • oiw: 熱心幫忙:)技术 + 1
    • wwjpl: 热心助人技术 + 1

TOP

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

回复 2# apang


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

TOP

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

TOP

返回列表