Используйте .txt logfile для перемещения файлов в несколько папок - PullRequest
2 голосов
/ 23 июня 2019

У меня есть logfile.txt, который содержит следующие строки текста:

C:\VIDEO\My Video 1\My Video 1.mkv
C:\VIDEO\MyVideo2\MyVideo2.mkv
C:\VIDEO\My.Video.3\My.Video.3.mkv

и папку C: \ Temp, которая содержит файлы:

My Video 1.mkv
MyVideo2.mkv
My.Video.3.mkv

Мне нужноиспользуйте logfile.txt, чтобы сопоставить соответствующее имя файла.mkv, указанное в файле журнала, затем переместите файл обратно в правильную папку (как показано в файле журнала).

например, My Video 1.mkv следует переместить вC:\VIDEO\My Video 1\

Соответствующие папки уже существуют в C:\VIDEO, поэтому не требуют создания.

Как мне написать пакетный файл для этого?

Я начинаю спрямо сейчас с чем-то вроде этого, но я сейчас застрял:

@echo off
setlocal enableDelayedExpansion
set "logfile=C:\Temp\logfile.txt"
set "SourcePath=C:\Temp"
set "DestPath=C:\VIDEO"

if exist ..\DestPath\nul rd /s /q ..\DestPath
if not exist ..\DestPath\nul md ..\DestPath

for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "%logfile%"') do move "%SourcePath%\%%a" "%DestPath%"

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 23 июня 2019

довольно просто, если вы используете %%~ модификаторы (см. for /?)

for /f "tokens=*" %%A in (%logfile%) do ECHO move "%SourcePath%\%%~nxA" "%%~dpA"

ПРИМЕЧАНИЕ. Я отключил команду move по соображениям безопасности.Если вы уверены, что он работает как задумано, удалите ECHO.

(Вы видели мой ответ на ваш предыдущий вопрос ?)

1 голос
/ 23 июня 2019

Также легко в PowerShell. Если вы уверены, что файлы будут перемещены правильно, удалите -WhatIf из команды Move-Item.

=== Move-FilesToMultipleFolders.ps1

Get-Content 'C:\src\t\logfile.txt' |
    ForEach-Object { Move-Item -Path "C:\Temp\$(Split-Path $_ -Leaf)" $_ -WhatIf }

Псевдоним не должен быть помещен в скрипт, но здесь есть одна строка.

gc 'C:\src\t\logfile.txt' | % { move "C:\Temp\$(Split-Path $_ -le)" $_ -WhatIf }

Если вы создаете скрипт файла .bat для его запуска, поместите оба файла .bat и .ps1 в один каталог.

=== Move-MultipleFilesToFolders.bat

powershell -NoLogo -NoProfile -File "%~dp0Move-MultipleFilesToFolders.ps1"
0 голосов
/ 23 июня 2019

Итак, в общем, Стефан, вы говорите, что ответ:

@echo off
setlocal enableDelayedExpansion
set "logfile=C:\Temp\logfile.txt"
set "SourcePath=C:\Temp"

@echo on & for /f "tokens=*" %%A in (%logfile%) do move "%SourcePath%\%%~nxA" "%%~dpA"

, чтобы все заработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...