1
votes

Passer par le dossier avec n'importe quel modèle spécifique

J'ai un script batch qui ne copierait que le fichier pdf, basé sur le code entré par l'utilisateur. Dès qu'ils appuieront sur Entrée, il recherchera un dossier qui a le même nom de fichier avec le code entré .. alors s'il existe, il copiera le pdf à l'intérieur ..

Maintenant, j'ai un problème car dans un sous-dossier, son nom de fichier n'a pas de nom de fichier standard.

Comme par exemple: parfois son nom de fichier est UV DATA d'autres est UV-DATA , UV

exemple de stockage de structure de dossier pour le fichier pdf:

set /p code=Input Control Number:

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

exemple de destination de dossier:

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

Le dossier UV DATA est le seul à changer. Comment puis-je définir uniquement UV et le deuxième mot est un motif spécifique?

Exemple de XCopy s'il s'agit d'un code statique et que le nom de fichier par défaut est UV DATA code>:

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

J'ai seulement essayé quelque chose comme ça mais ça ne marche pas:

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


7 commentaires

Je suggérerais d'utiliser for loop / s pour récupérer le nom du fichier avec %% ~ nI , tester la valeur de la chaîne cible avec un sous-programme findstring, puis, si le résultat montre la chaîne cible pour être présent, exécutez la commande.


@ T3RR0R pouvez-vous me montrer comment puis-je y parvenir?


le dossier de destination sera-t-il toujours exactement le même que le nom du PDF? Ou le dossier de destination peut-il être différent? En d'autres termes, tout fichier PDF avec UV dans le nom doit être copié dans un dossier contenant UV ?


@GerhardBarnard UV n'est pas le fichier pdf, c'est un nom de fichier de sous-dossier que je dois traverser pour copier le fichier PDF à l'intérieur.


ok, s'il vous plaît faites-moi une faveur, modifiez la question et montrez-moi un exemple de fichier pdf et un exemple de chemin de destination.


@GerhardBarnard Voir ma modification .. j'ai juste besoin de mettre le pdf copié dans le dossier de destination .. le problème est que UV DATA change parfois en UV-DATA et UV ....


ok, laissez-moi jeter un oeil à votre structure rapidement et je vous répondrai bientôt.


3 Réponses :


0
votes

Les caractères génériques dans les dossiers ne sont pas pris en charge dans des opérations telles que xcopy

Cette solution utilisant FOR / F est en quelque sorte hacky, mais certainement fonctionne:

@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
)

Cela copiera le fichier dans tous les dossiers au format UV


1 commentaires

Je ne sais pas ce qui ne va pas avec le script, car toutes les réponses ne semblent pas fonctionner. Vous pouvez utiliser FOR / D pour boucler dans des dossiers, mais dans un fichier batch, le «d» disparaît.



0
votes

Essayez-le. Vous devez configurer les chemins source et de destination ci-dessous pour vous assurer d'avoir le meilleur niveau de recherche, mais comme dir / s est utilisé, vous pouvez aller au niveau le plus bas des chemins source et de destination:

@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
)


4 commentaires

quels chemins avez-vous donné la source et la destination?


pour la source % HOMEPATH% \% code% \ Folder1 \% code% -DATA.pdf et pour la destination % HOMEPATH% \ Folder \% code% \ UV DATA \ DOCUMENTS ... je l'ai d'abord essayé localement ... mais cela ne fonctionne pas


pouvez-vous modifier votre réponse et essayer de mettre le chemin dans pour / et ne pas le définir comme variable ...


Voir modifier s'il vous plaît. Ne mettez pas les chemins complets comme vous l'avez fait.



0
votes
@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
This will try to find the destination path with
UV* in the path as specified in the OP and
comments as to my understanding.Change directory to %HOMEDRIVE% else a path
starting with %HOMEPATH% can be invalid if
the the current directory is on another drive.
If you use a drive which mirrors the %HOMEPATH%
then you can disable the change of directory to
remain on that drive.The destination path is resolved to the
DOCUMENTS folder, else the destination
variable will be detected as undefined.Checks are done to ensure initial source
and destination paths exist.Since only 1 file is being copied, using
xcopy arguments that apply for 1 file.
Check to see if I am correct.To understand what the code is doing, set
the line @echo off to @echo on to test.

2 commentaires

Impossible d'obtenir la destination ... il ne passe pas par le dossier UV .. il s'arrête uniquement dans le dossier% code% ....


Je l'ai finalement eu! Merci pour l'effort... :)