We help IT Professionals succeed at work.

Move files from directory to directory with .BAT-File

365 Views
Last Modified: 2012-05-06
Hi everyone,

I'm not that familiar with DOS and .BAT-Files. Thats the reason for this post. And i hope some one can help me solve this problem.

There is an Internet application where operators check check documents. Before that the operators check, the documents go trough 2 recognition engines. If the engines detect an ERROR they documents are placed in an map (maps or numbered from 1 to 200) in a special ERROR directory (see figure 1). The documents in the ERROR directory, must go back in the pipeline. I cant cut and paste, because that not efficient and there are parameters that need to be positive (see Figure 2). They have to be moved from ERROR to a special map into the input directory PDF. This map is also numbered from 1 to 200 (see Figure 3).

Parameters:
*User needs to give up an START and END date. Only the documents in that period need to be replaced.

*The minimum size of the documents. There or files of 0 Kb and those files need to stay in the error directory.

*Must give the amount that can be moved to a map into the PDF\1 map. For example the maximum of documents a map or 4000 documents. If the 4000 has been retched the next 4000 must bee moved to PDF\2 and so on.

*In a .TXT file must keep a log with the following information. Wich files have been copied and when.
Structure---ERROR-Directory.JPG
Documents-in-ERROR-Dir.JPG
Move-from-ERROR-dir-to-PDF.JPG
Comment
Watch Question

Qlemo"Batchelor", Developer and EE Topic Advisor
CERTIFIED EXPERT
Top Expert 2015

Commented:

@echo off
setlocal EnableDelayedExpansion
 
cd /D D:\Textkernel\Pipeline\xt_input
 
set /P dtstart=Start date in mm/dd/yyyy: 
set /P dtend=End date in mm/dd/yyyy: 
 
REM convert mm/dd/yyyy in yyyymmdd
set dtstart=%dtstart:~-4%%dtstart:~-10,2%%dtstart:~-7,2%
set dtend=%dtend:~-4%%dtend:~-10,2%%dtend:~-7,2%
 
set /P minsize=Minimum of size in Bytes: 
 
echo ---- from %dtstart% to %dtend%, size ^> %minsize% ---- >> logfile.txt
 
set cnt=0
set fld=1
for /F "tokens=*" %%F in ('dir *.pdf*') do if %%~zF GTR %minsize% (
  set dt=%%~tF
  set dt=!dt:~0,-6%
  set dt=!dt:~-4!!dt:~-10,2!!dt:~-7,2!
  if !dt! GEQ %dtstart% if !dt! LEQ %dtend% (
    set /A cnt+=1
    if !cnt! GTR 4000 set /A fld+=1& set cnt=0
    move %%F pdf\!fld!\
    echo %%F >>logfile.txt
  )
)

Open in new window

Wayne BarronAuthor, Web Developer
CERTIFIED EXPERT
Top Expert 2009

Commented:
this is something that I did for another user.
http:Q_24330834.html#a24232677  --- Instructions for running it on a schedule.
http:Q_24330834.html#a24165351 --- Code here

This uses RoboCopy.

Good Luck
Carrzkiss
Wayne BarronAuthor, Web Developer
CERTIFIED EXPERT
Top Expert 2009

Commented:
Never mind my post.
It can probably do what you need, but not without a lot of work.
I hope that the information from: Qlemo:
Will do what you need, it looks like it will.

Good Luck
Carrzkiss

Author

Commented:
Qlemo: Thank you for your solution. Butt i have a question. Where do you set the ERROR and PDF directory. The files must be moved vroom ERROR to PDF.

In your script i see in line 4 the main directory. "cd /D D:\Textkernel\Pipeline\xt_input". In the for loop you give the wildcard *.pdf, this will search for all the docs in ERROR an in PDF. That is not suppose to happen.

Hope you understand what i mean.
Qlemo"Batchelor", Developer and EE Topic Advisor
CERTIFIED EXPERT
Top Expert 2015

Commented:
I understand well. And you are partitially right, I forgot to use the ERROR folder. The code above will not do anything, as it will search in xt_input only, no subdirs.+
Replace line 19 with


for /F "tokens=*" %%F in ('dir *.pdf*') do if %%~zF GTR %minsize%

Open in new window

"Batchelor", Developer and EE Topic Advisor
CERTIFIED EXPERT
Top Expert 2015
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
Thank you very much! It works well! At least if the date is well converted. The date can be written in two ways. mm/dd/yyyy an dd-mm-yyyy. That one of the reasons it didn't work.

On Server 2003 the date will always be written like this: mm/dd/yyyy?

Qlemo thank you very much for your solution!

Author

Commented:
Thank you for providing me a solution. I tested the script on a XP machine with the date set as dd-mm-yyyy, on the server the date is set as mm/dd/yyyy. I think that there must be a date check, to be sure that the right conversion will be used.

Gain unlimited access to on-demand training courses with an Experts Exchange subscription.

Get Access
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Empower Your Career
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.