If exist does not work anymore in a batch file
If exist does not work anymore in a batch file
i have a problem with a batch. It scans folders for new pdf files, print, move and delete them. It worked fine until it suddenly stopped without an error. If i type it manually into the cmd it calls "file path does not exist", but it's the correct path. I don't have any clue, maybe some can help or have the same issue.
Thank you in advance for your help.
@echo off
:pdfprint
echo Checkin Druck - bitte offen lassen
IF EXIST *.pdf for %%p in ("C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf") do ( start /b "Print" "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" /n /t "%%p"
ping 127.0.0.1 -n 10
%windir%system32taskkill.exe /F /IM AcroRd32.exe
ping 127.0.0.1 -n 5
xcopy "C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf" "C:UsersTextilpflegeDesktopbackup"
ping 127.0.0.1 -n 2
move "%%p" "C:UsersTextilpflegeDocumentsBelegtransfer9860-11206Rechnungsausgang"
IF EXIST *.pdf for %%p in ("C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf") do DEL *.pdf
)
IF EXIST *.pdf for %%p in ("C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf") do ( start /b "Print" "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" /n /t "%%p"
ping 127.0.0.1 -n 10
%windir%system32taskkill.exe /F /IM AcroRd32.exe
ping 127.0.0.1 -n 5
xcopy "C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf" "C:UsersTextilpflegeDesktopbackup"
ping 127.0.0.1 -n 2
move "%%p" "C:UsersTextilpflegeDocumentsBelegtransfer9860-11206Rechnungsausgang"
IF EXIST *.pdf for %%p in ("C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf") do DEL *.pdf
)
goto :pdfprint
@echo off
remove @echo off as Gerhard says. Also add echo commands throughout like
echo step1
, echo step2
in order to see where if fails.– Menelaos Bakopoulos
Sep 10 '18 at 12:10
echo step1
echo step2
@MenelaosBakopoulos why bother adding more echo's? Just remove
@echo off
run the file and it will give the error directly after the failing path.– Gerhard Barnard
Sep 10 '18 at 12:12
@echo off
thank you for your comment. It's ridiculous, no path fails, runs through properly. It just don't print, move, copy the file
– Dario Buchholz
Sep 10 '18 at 12:13
You not need the
IF EXIST *.pdf
command at all. The for %%p in ("...*.pdf")
one process existent files. If files not exists, process nothing...– Aacini
Sep 10 '18 at 12:27
IF EXIST *.pdf
for %%p in ("...*.pdf")
1 Answer
1
Let me modify the script with some changes. Firstly, I am unsure of why you want to check if files exist locally, then do a for delete on another dir. Also, let's swop out ping
for timeout
ping
timeout
@echo off
:pdfprint
echo Checkin Druck - bitte offen lassen
for %%a in ("C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf") do (
start /b "Print" "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" /n /t "%%a"
timeout 10
%windir%system32taskkill.exe /F /IM AcroRd32.exe
timeout 5
xcopy "C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf" "C:UsersTextilpflegeDesktopbackup"
timeout 2
move "%%a" "C:UsersTextilpflegeDocumentsBelegtransfer9860-11206Rechnungsausgang"
del "C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf"
)
for %%d in ("C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf") do (
start /b "Print" "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" /n /t "%%d"
timeout 5
%windir%system32taskkill.exe /F /IM AcroRd32.exe
timeout 5
xcopy "C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf" "C:UsersTextilpflegeDesktopbackup"
timeout 2
move "%%d" "C:UsersTextilpflegeDocumentsBelegtransfer9860-11206Rechnungsausgang"
del "C:UsersPublicDocumentsLexwarebueroeasyDatenPoststelle*.pdf"
)
goto :pdfprint
Problems!
too many for loops where not needed. You do for %%p in (pathto*.pdf) del *.pdf
so effectively saying, for each pdf
, delete all pdf
's. Simply do a del path*.pdf
without the unwanted for loops.
for %%p in (pathto*.pdf) del *.pdf
pdf
pdf
del path*.pdf
You assign the same token value %%p
to 2 for loops, instead, I added %%a
and %%d
%%p
%%a
%%d
The if exist statements are useless, as you check if exist locally *.pdf, but delete in another folder.
for %%p in ("C:UsersPublicDocumentsLexwarebueroeasyDateneRechnungsigned*.pdf") do ( start /b "Print" "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" /n /t "%%p" "%%p" can not be processed syntactically at this point.
– Dario Buchholz
Sep 10 '18 at 12:51
Because in this folder the pdf appear as soon as they are created, they should not be stored there because they have to be further processed
– Dario Buchholz
Sep 10 '18 at 12:54
signed and Poststelle are folders
– Dario Buchholz
Sep 10 '18 at 12:56
i don't know why but after signed there is a slash. If i write a comment here it disappear
– Dario Buchholz
Sep 10 '18 at 12:57
it's working now. Great thanks. Is the query necessary? What the heck was the problem?
– Dario Buchholz
Sep 10 '18 at 13:06
Thanks for contributing an answer to Stack Overflow!
But avoid …
To learn more, see our tips on writing great answers.
Required, but never shown
Required, but never shown
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
remove
@echo off
and launch the file from cmd.exe and simply see which path fails.– Gerhard Barnard
Sep 10 '18 at 12:07