【问题标题】:Window batch file - removing the directory from a file path窗口批处理文件 - 从文件路径中删除目录
【发布时间】:2013-11-20 06:23:05
【问题描述】:

我正在尝试在我的代码库中搜索所有 jscript 目录,然后使用以下批处理脚本获取这些目录中的相关文件列表...

@echo off

setlocal enableextensions enabledelayedexpansion

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S jscripts') DO (
    CD %%G
    CD dev

    SET "currentDir=!cd!"
    IF NOT "!currentDir:~-1!"=="\" SET "currentDir=!currentDir!\"

    FOR /r %%F IN (*.js) DO (
        SET "relativePath=%%F"
        SET "relativePath=!relativePath:%currentDir%=!"

        ECHO !relativePath!
    )
)

一切都按预期进行,直到...

SET "relativePath=!relativePath:%currentDir%=!"

我可以弄清楚我需要用什么格式来写这个……

c:\dir\jscript\dev\file.js

进入...

file.js

请帮忙!


其他信息

目录设置如下

dir
    jscripts
        dev
            file.js
            file2.js
        live
            file.js
            file2.js


dir2
    jscripts
        dev
            file.js
            file2.js
        live
            file.js
            file2.js

我想找到所有 jscripts 目录,将 CD 放入其中,获取 相对于 dev 目录的所有 JS 文件的列表

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    要从包含完整路径的变量中提取文件名和扩展名,请使用%~nx0,如

    set G=c:\dir\jscript\file.js
    echo %~nxG
    

    引用this answer to a similar question以下内容

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    
    The modifiers can be combined to get compound results:
    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    

    这是“for /?”的复制粘贴提示符下的命令。希望它 有帮助。

    相关

    Top 10 DOS Batch tips (Yes, DOS Batch...) 显示 batchparams.bat(作为要点链接到源):

    C:\Temp>batchparams.bat c:\windows\notepad.exe
    %~1     =      c:\windows\notepad.exe
    %~f1     =      c:\WINDOWS\NOTEPAD.EXE
    %~d1     =      c:
    %~p1     =      \WINDOWS\
    %~n1     =      NOTEPAD
    %~x1     =      .EXE
    %~s1     =      c:\WINDOWS\NOTEPAD.EXE
    %~a1     =      --a------
    %~t1     =      08/25/2005 01:50 AM
    %~z1     =      17920
    %~$PATHATH:1     =
    %~dp1     =      c:\WINDOWS\
    %~nx1     =      NOTEPAD.EXE
    %~dp$PATH:1     =      c:\WINDOWS\
    %~ftza1     =      --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
    

    【讨论】:

      【解决方案2】:
      @echo off
      setlocal enableextensions enabledelayedexpansion
      
      rem Where to start
      pushd "c:\wherever\global2_root\"
      
      rem Search .....\dev directories
      for /f "tokens=*" %%d in ('dir /ad /s /b ^| findstr /e "\\dev"') do (
          rem change to that directory
          pushd "%%~fd"
          echo Now in !cd!
          rem process files inside directory
          for %%f in (*.js) do (
              echo %%f
          )
          rem return to previous directory
          popd
      )
      rem return to initial directory
      popd
      
      rem cleanup 
      endlocal
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        相关资源
        最近更新 更多