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
3 Réponses :
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
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.
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 )
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.
@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.
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... :)
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 contenantUV
?@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 enUV-DATA
etUV
....ok, laissez-moi jeter un oeil à votre structure rapidement et je vous répondrai bientôt.