获取目录路径 2 级别并更改格式(批处理文件)

Get Directory Path 2 Levels Up and Change the Format (Batch File)

我正在编写一个大型脚本来一次迁移多个文件,我需要能够以特定格式获取每个文件目录。

如果您查看下图,您可以在其目录中看到一个文件示例

Example

这里的目录是 C:\Users\Work\Desktop\Test Env\Videos on Server16st

但我需要它显示为 2016-02-1st,它向上 2 级并且具有 dashes 而不是 slashes

我使用下面的代码获取路径:

set p=%cd%
echo %p%
pause

关于如何更改输出有什么想法吗?

如果一直是第6、7、8:

for /f "delims=\ tokens=7-9" %%a in ("%cd%") do echo %%a-%%b-%%c

我建议为此任务使用以下批处理文件:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

for /R "%UserProfile%\Desktop\Test Env\Videos on Server" %%I in (*.mp4) do (
    for %%J in ("%%~dpI..\..") do (
        for %%K in ("%%~dpI..") do (
            for %%L in ("%%~dpI.") do (
                echo %%~nxJ-%%~nxK-%%~nxL
            )
        )
    )
)

endlocal

当然可以仅使用 * 而不是 *.mp4 来处理在 %UserProfile%\Desktop\Test Env\Videos on Server 及其子目录中递归找到的所有文件。

另一个解决方案是:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

for /D %%I in ("%UserProfile%\Desktop\Test Env\Videos on Server\*") do (
    for /D %%J in ("%%I\*") do (
        for /D %%K in ("%%J\*") do (
            echo %%~nxI-%%~nxJ-%%~nxK
        )
    )
)

endlocal

哪种方法更好取决于如何处理 %UserProfile%\Desktop\Test Env\Videos on Server 子目录中的文件,即使用哪些命令代替最内部 for 中的命令 echo环形。第一个代码预计 *.mp4 文件或多或少只能在指定父目录下的三个目录级别找到。

要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • setlocal /?

注意:命令 SETLOCALENDLOCAL 在这里并不是必需的,可以省略作为批处理文件执行的默认环境与 setlocal EnableExtensions DisableDelayedExpansion.

定义的相同

另请参阅有关 Naming Files, Paths, and Namespaces 的 Microsoft 文档。