Пройдите через папку с любым указанным шаблоном c - PullRequest
1 голос
/ 17 февраля 2020

У меня есть пакетный скрипт, который будет копировать только PDF-файл, основываясь на введенном пользователем коде. Как только они нажимают Enter, он будет искать папку с тем же именем файла, что и введенный код. Затем, если он существует, он скопирует PDF в ..

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

Как например: иногда его имя файла UV DATA, другие * UV-DATA, UV

пример структуры структуры папок для pdf-файл:

server
'----22050-022
     '----Folder1
               22050-022-DATA.pdf

пример папки назначения:

server2
'----Folder
     '----22050-022
          '----UV DATA
               '----DOCUMENTS

Папка UV DATA меняется только одна. Как я могу установить только UV, а второе слово - это любой конкретный шаблон c?

Пример XCopy, если это код stati c и имя файла по умолчанию UV DATA:

set /p code=Input Control Number:

xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV DATA\DOCUMENTS\" /D /E /C /I /Y /H

Я только попробовал что-то подобное, но не работает:

set /p code=Input Control Number:

xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV*.*\DOCUMENTS\" /D /E /C /I /Y /H

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Дайте этому go. Вам необходимо настроить пути источника и назначения ниже, чтобы обеспечить наилучший уровень для поиска, но при использовании dir /s вы можете go достичь самого низкого уровня путей источника и назначения:

@echo off
:start
set /p "code=Input Control Number: "
set "source=%HOMEPATH%\%code%"
set "destination=%HOMEPATH%\folder"
if "%code%" == "" echo Please input a valid Control number & goto start 
for /f "delims=" %%i in ('dir /b /a-d /s "%source%" ^| findstr /i "%code%" ^| findstr /i "pdf"') do for /f "delims=" %%a in ('dir /b /s /ad "%destination%" ^| findstr /i "%code%" ^| findstr /i "UV" ^| findstr /i "Documents"') do (
    echo "%%a"
    echo xcopy "%%~i" "%%~a" "/D /E /C /I /Y /H
)
0 голосов
/ 18 февраля 2020
@echo off
setlocal

rem Change current directory to HOMEDRIVE.
cd /d "%HOMEDRIVE%" || (
    >&2 echo Failed to change directory to "%HOMEDRIVE%"
    exit /b 1
)

rem Get the control number i.e. 22050-022.
set /p "code=Input Control Number: " || exit /b 0

rem Set initial source path and destination path here.
@rem Note: destination path without trailing "\UV*\DOCUMENTS".
set "source=%HOMEPATH%\%code%\Folder1\%code%-DATA.pdf"
set "destination=%HOMEPATH%\Folder\%code%"

rem Check initial source path.
if not exist "%source%" (
    >&2 echo Initial source path "%source%" not exist.
    exit /b 1
)

rem Check initial destination path.
if not exist "%destination%" (
    >&2 echo Initial destination path "%destination%" not exist.
    exit /b 1
)

rem Get "%%destination%%\UV*\DOCUMENTS\" path.
(
    set "destination="

    for /d %%A in ("%destination%\UV*") do if not defined destination (
        @rem Force an echo on line break.
        if exist "%%~A\DOCUMENTS\" set "destination=%%~A\DOCUMENTS\"
    )

    if not defined destination (
        >&2 echo Failed to get destination from "%destination%".
        exit /b 1
    )
)

rem Copy file from source to destination if file date is newer.
xcopy /d /y "%source%" "%destination%"
exit /b 0

Это попытается найти путь назначения с UV* в пути, указанном в ОП, и комментариями, насколько я понимаю.

Измените каталог на %HOMEDRIVE%, иначе путь начинается с %HOMEPATH% может быть недействительным, если текущий каталог находится на другом диске. Если вы используете диск, который отражает %HOMEPATH%, вы можете отключить изменение каталога, чтобы остаться на этом диске.

Путь назначения разрешен в папку DOCUMENTS, иначе переменная destination будет быть обнаруженным как неопределенное.

Проверяется, чтобы убедиться, что исходные и целевые пути существуют.

Поскольку копируется только 1 файл, используются аргументы xcopy, которые применяются для 1 файла. Проверьте, правильно ли я.

Чтобы понять, что делает код, установите строку @echo off в @echo on для проверки.

0 голосов
/ 17 февраля 2020

Символы подстановки в папках не поддерживаются в таких операциях, как xcopy

Это решение, использующее FOR /F, довольно хакерское, но определенно работает:

@echo off
set /p "code=Input Control Number:"
for /f "tokens=* delims= " %%a in ('dir /b /ad "%MySetDestination%\Folder1\%code%\UV*"') (
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV-%%a\DOCUMENTS\" /D /E /C /I /Y /H
)

Это скопирует файл во все папки в формате UV<ANYTHING HERE>

...