Пакетное перемещение папок, в которых есть определенный файл - PullRequest
0 голосов
/ 06 мая 2018
  1. Я пытаюсь получить список папок, в которых есть определенный файл *.t (в папке не более одного такого файла):

    setlocal enabledelayedexpansion
    
    for /f "delims=" %%a in ('Dir /B /A:-D /S "D:\Old\Stuff\*.t"') do 
    (@echo %%~dpa>>Folders.txt)
    
    endlocal
    

    Это работает и дает мне файл с полным путем и \ в конце ...

    1011 *, например * D: \ Old \ Stuff \ Folder 1 \
    D: \ Old \ Stuff \ Folder 2 \
    D: \ Old \ Stuff \ Папка 3 \

  2. Затем я хочу переместить указанные папки с их содержимым в другое место, но оно не работает:

    for /f "delims=" %%i in (Folders.txt) do Move %%i "D:\New\Stuff\"
    

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Поскольку дубликаты невозможны, решение довольно простое; вам даже не нужен временный файл Folders.txt:

for /F "delims=" %%F in ('dir /S /A:-D /B "D:\Old\Stuff\*.t"') do (
    move "%%~dpF." "D:\New\Stuff\"
)

%%~dpF возвращает родительский каталог каждого найденного *.t файла с обратной косой чертой. Просто добавьте ., что означает текущий каталог, чтобы завершающий \ больше не вызывал проблем с командой move.

Не пытайтесь удалить завершающую обратную косую черту, потому что это может вызвать проблемы в некоторых особых ситуациях: предположим, что целевой каталог - D:\, поэтому при удалении \ остается D:, который отличается от D:\ (но D:\. есть).

Даже если в определенном каталоге может быть более одного файла *.t, код будет работать, хотя команда move выдает ошибку для каждого дубликата, поскольку каталог уже был перемещен ранее. Простое добавление или добавление 2> nul к командной строке move скрыло эти (и другие) ошибки.

0 голосов
/ 06 мая 2018

1001 * попробовать *

for /f "delims=" %%i in (Folders.txt) do Move "%%i*" "D:\New\Stuff\"

Первый аргумент для move должен быть заключен в кавычки, так как имена каталогов содержат пробелы; * указывает «все файлы в каталоге».

Вы не сказали, хотите ли вы перемещать какие-либо подкаталоги. Обратите внимание, что перемещение предназначено для файлов, а не для каталогов.

...