获取目录路径 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 /?
注意:命令 SETLOCAL 和 ENDLOCAL 在这里并不是必需的,可以省略作为批处理文件执行的默认环境与 setlocal EnableExtensions DisableDelayedExpansion
.
定义的相同
另请参阅有关 Naming Files, Paths, and Namespaces 的 Microsoft 文档。
我正在编写一个大型脚本来一次迁移多个文件,我需要能够以特定格式获取每个文件目录。
如果您查看下图,您可以在其目录中看到一个文件示例
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 /?
注意:命令 SETLOCAL 和 ENDLOCAL 在这里并不是必需的,可以省略作为批处理文件执行的默认环境与 setlocal EnableExtensions DisableDelayedExpansion
.
另请参阅有关 Naming Files, Paths, and Namespaces 的 Microsoft 文档。