Получение родительского каталога для каждого файла из Dir Output - PullRequest
0 голосов
/ 15 июня 2019

У меня есть каталог с несколькими уровнями папок. Я совершенно новичок в написании командных файлов и пишу свой первый. Застрял на века при попытке

  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

EDIT

я тоже видел эту ветку

И попробовал этот код:

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 ]

1 голос
/ 15 июня 2019
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*, чтобы лучше соответствовать моей системе.

Не могу себе представить, что вы добровольно повторно вводите команду, поэтому показан формат для использования в командном файле.

0 голосов
/ 15 июня 2019

Я бы посоветовал вам сделать это как отдельный вложенный цикл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...