从目录输出获取每个文件的父目录

时间:2019-06-14 21:34:30

标签: windows batch-file cmd

我的目录包含多个级别的文件夹。 我完全不熟悉编写批处理文件,而我正在编写第一个文件。 坚持多年尝试

  1. 查找目录中的所有文件,包括子文件夹

  2. 获取每个文件的父目录

  3. 另存为变量,例如%parent.filename%

我一直在这里搜索: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)

在Google上,但不幸的是,我被困住了。

所以现在我设法将每个文件的完整路径另存为变量,但是我希望%Folder.FileName%仅返回父目录,而不是完整路径。

这是我在命令提示符下测试过的代码。

For /F %A in ('Dir Linkedin /A-D /s /b /o') do SET Folder.%~nxA=%~pA

编辑

我还看到了this thread

并尝试了以下代码:

FOR /F %A in ('Dir Linkedin /A-D /s /b /o') do ECHO %~nxA %~pA >>Paths.txt
FOR /F "tokens=1,2" %A in (Paths.txt) do SET Parent.%A=%~nB

但是%~nxB没有返回任何值...我希望它能获取路径的最后一个字符串。

2 个答案:

答案 0 :(得分:1)

FOR /F %A in ('Dir Linkedin /A-D /s /b /o') do ECHO %~nxA %~pA. >>Paths.txt
FOR /F "tokens=1,2" %A in (Paths.txt) do SET Parent.%A=%~nB

请注意多余的.

~p修饰符提供的路径以\终止,因此向该目录添加.意味着“目录名本身就像文件名一样”

作为单行命令(在批处理中,由标准palaver装饰)

@ECHO OFF
SETLOCAL

FOR /F %%A in ('Dir test* /A-D /s /b /o') do FOR /F %%S in ("%%~pA.") do SET Parent.%%~nxA=%%~nS

set parent.
GOTO :EOF

我使用文件掩码test*来更好地适应我的系统。

我无法想象您会自愿重新键入命令,因此显示了批处理文件中使用的格式。

答案 1 :(得分:0)

我建议您将其作为命令提示符中的单个嵌套For循环来执行,并且不使用任何输出文件:

For /F "Delims=" %A In ('Dir /B/S/A-D "Linkedin" 2^>NUL')Do @For %B In ("%~pA.")Do @Set "Folder.%~nxA=%~nxB"

从批处理文件中,也许可以帮到您

@Echo Off
Rem Remove any existing Folder. variables
For /F "Tokens=1*Delims==" %%A In ('Set Folder. 2^>NUL')Do Set "%%A="

Rem Set the new variables
For /F "Delims=" %%A In ('Dir /B/S/A-D "Linkedin" 2^>NUL')Do For %%B In ("%%~pA.")Do Set "Folder.%%~nxA=%%~nxB"

Rem View any returned variables
Set Folder. 2>NUL&&Pause