【问题标题】:Command Prompt: dir /s EXCLUDE full path but INCLUDE sub folders命令提示符:dir /s 排除完整路径但包含子文件夹
【发布时间】:2014-07-04 17:32:24
【问题描述】:

我有一个简单但烦人的问题。我正在制作一个批处理文件,我正在使用:

dir /B /S /A:-D *.wad *.mdl *.wav *.spr *.bmp *.tga *.pcx *.mp3 *.txt *.res > sample.res

得到:

C:\Downloads\Sample1.wad  
C:\Downloads\Sample2.wav  
C:\Downloads\Folder1\Sample3.mdl  
C:\Downloads\Folder1\Folder2\Sample4.txt  

但我真正想要的是:

Sample1.wad  
Sample2.wav  
Folder1/Sample3.mdl  
Folder1/Folder2/Sample4.txt  

我希望包含子文件夹,但不希望包含完整路径。我怎样才能做到这一点?谢谢。

[编辑:出于我的目的,我显然需要一个 FORWARD 斜杠而不是 BACK 斜杠]

【问题讨论】:

    标签: list batch-file command prompt dir


    【解决方案1】:

    试试这样:

    @echo off
    
    setlocal enabledelayedexpansion
    
    (for /f  "delims=" %%a in ('dir /B /S /A:-D *.wad *.mdl *.wav *.spr *.bmp *.tga *.pcx *.mp3 *.txt *.res') do ( 
           set "$Path=%%a"
           set $path=!$path:%cd%=!
           echo !$path:~1!)
    )>sample.res
    

    编辑:\ 替换为/

    @echo off
    
    setlocal enabledelayedexpansion
    
    (for /f  "delims=" %%a in ('dir /B /S /A:-D *.wad *.mdl *.wav *.spr *.bmp *.tga *.pcx *.mp3 *.txt *.res') do ( 
           set "$Path=%%a"
           set $path=!$path:%cd%=!
           set $path=!$path:\=/!
           echo !$path:~1!)
    )>sample.res
    

    【讨论】:

    • 工作得非常好,非常感谢!虽然我现在意识到一个新问题。无论如何,那里有 FORWARD ( / ) 斜杠而不是 BACK 斜杠 ( \ ) 吗?无论哪种方式,非常感谢。
    • 我知道它说要避免像“谢谢”这样的 cmets,但让你的帮助不被感谢似乎是不对的,所以再次非常感谢。完美运行!
    【解决方案2】:

    这对我有用:

    FOR /F "tokens=*" %G IN ('dir /B /S /A:-D *.wad *.mdl *.wav *.spr *.bmp *.tga *.pcx *.mp3 *.txt *.res') DO ECHO %~nG%~xG >> sample.res
    

    【讨论】:

    • 太棒了,感谢您的帮助!关于生成文件以在文件夹之间使用正斜杠而不是反斜杠的任何想法?不管怎样,再次感谢。 :-)
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2019-02-05
    • 2013-07-21
    • 2017-08-05
    • 2011-01-08
    • 2011-09-06
    • 2014-05-09
    相关资源
    最近更新 更多