Sophisticated(!) copying in DOS

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Let's say I have ten files in a subdirectory, and I want to write a batch
file to copy ONLY five of them...

The five I do NOT want to copy all start with the same letters in their
filenames. The five I DO want to copy are all different. I cannot change this
attribute, or the subdirectory in which they are stored.

In other words, I have the following files:

ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
Ice Cream.fil
Pizza.fil
Beer.fil
Accounts.fil
Salary.fil

I want to write a script that will copy "Ice Cream", "Pizza", "Beer",
"Accounts", and "Salary", but that will SKIP the "ABC Jackson", "ABC Alias",
etc.

I know if I did "copy ABC*.fil" it would do the EXACT OPPOSITE of what I
want... Is there a "contra"command that would pull this off?

Thanks!
 
Xcopy with the /exclude switch. Make a file listing what to exclude and
then use that as "file1" in the parameter list

see XCOPY /?
 
Which begs the next question...

What is this "file listing" of which you speak? Is that like a mini-batch
file?

Thanks!
 
RJB said:
Let's say I have ten files in a subdirectory, and I want to write a batch
file to copy ONLY five of them...

The five I do NOT want to copy all start with the same letters in their
filenames. The five I DO want to copy are all different. I cannot change this
attribute, or the subdirectory in which they are stored.

In other words, I have the following files:

ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
Ice Cream.fil
Pizza.fil
Beer.fil
Accounts.fil
Salary.fil

I want to write a script that will copy "Ice Cream", "Pizza", "Beer",
"Accounts", and "Salary", but that will SKIP the "ABC Jackson", "ABC Alias",
etc.

I know if I did "copy ABC*.fil" it would do the EXACT OPPOSITE of what I
want... Is there a "contra"command that would pull this off?

Thanks!

Try this one-line batch file:

@echo off
for /f "tokens=*" %%* in ('dir /ad /b') do echo %%* | find /i "ABC" > nul ||
echo xcopy "%%*" TargetFolder

Remove the second "echo" to activate the command.
 
Did you read "XCOPY /?" ?

The file contains a list of what should be excluded. In this case ABC*.fil
 
Much nicer than my own suggestion!


Bob I said:
Did you read "XCOPY /?" ?

The file contains a list of what should be excluded. In this case ABC*.fil
 
Yeah, I gotta say, Pegasus, your solution gives me an ice cream headache.

I still don't know if I get the "file listing" info...
From your initial post, it seems as if I am creating a file - called "file1"
- and in that file it includes a list of excluded files.

But I probably just want to do
/EXCLUDE ABC*.fil

Which is what your most recent post says. Right?

Anyway, I think I have enough info to experiment with.

Thanks,
 
Inline,
Yeah, I gotta say, Pegasus, your solution gives me an ice cream headache.

I still don't know if I get the "file listing" info...
From your initial post, it seems as if I am creating a file - called "file1"
- and in that file it includes a list of excluded files.
CORRECT


But I probably just want to do
/EXCLUDE ABC*.fil

Wrong, should be like this

XCOPY /EXCLUDE FILELIST.TXT

FILELIST.TXT contents are ABC*.fil
one entry per line, you may have to experiment with it a bit.
 
At the risk of being redundantly monotonous and obtuse:

1) Create a notepad file
2) In the file, type:
ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
3) Save it as "filelist.txt"
4) In the xcopy command,
XCOPY \\PATH\SOURCE_SUBDIRECTORY /EXCLUDE filelist.txt
\\PATH\TARGET_SUBDIRECTORY /d /h /p /r /u /k /y

Close?
 
BINGO! We have a Winner! :-) :-)
At the risk of being redundantly monotonous and obtuse:

1) Create a notepad file
2) In the file, type:
ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
3) Save it as "filelist.txt"
4) In the xcopy command,
XCOPY \\PATH\SOURCE_SUBDIRECTORY /EXCLUDE filelist.txt
\\PATH\TARGET_SUBDIRECTORY /d /h /p /r /u /k /y

Close?


:
 
I've tried every permutation I can think of, and the results I get are:
Can't read file: XXX

0 File(s) copied

(where XXX is whatever file comes after the "/exclude:" switch.

The "donotcopy.txt" file is in the SOURCE directory, correct?

Also, if I just try to exclude file(s) by name - a la /EXCLUDE:ABC*.fil, I
get the same result...
Can't read file: ABC*.fil

0 File(s) copied

What the heck is going on???
 
Let's see your precise command, and the contents of the
exclude file.
 
It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory
 
From the xcopy help screen (xcopy /?):

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]

/EXCLUDE:file1[+file2][+file3]...

In other words: you have to place a colon after the parameter "exclude".

If you still have problems, please quote your exact xcopy command,
not a generic version, and the contents of the exclude file.
 
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in
a separate line in the files. When any of the strings match any part of
the absolute path of the file to be copied, that file will be excluded
from being copied. For example, specifying a string like \obj\ or .obj
will exclude all files underneath the directory obj or all files with
the .obj extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.
 
Actually, I DO have the colon in there.... (I was careless in my retyping
the second time... Look back a coupla posts, and the colon's there!)

It has been long time since I've dealt with PATH listings... Where do I find
that? Is that in WIN.INI?

Bob I said:
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in a
separate line in the files. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded from
being copied. For example, specifying a string like \obj\ or .obj will
exclude all files underneath the directory obj or all files with the .obj
extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.
It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory
 
Never retype commands - use cut & paste!

You can see the path from a Command Prompt, by typing
just "path", without the quotes.

You set it in the Control Panel / System / Advanced / Environment
Variables.

I note that you seem to be a little reluctant to post your actual
command and the contents of the Exclude file.


RJB said:
Actually, I DO have the colon in there.... (I was careless in my retyping
the second time... Look back a coupla posts, and the colon's there!)

It has been long time since I've dealt with PATH listings... Where do I find
that? Is that in WIN.INI?

Bob I said:
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in a
separate line in the files. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded from
being copied. For example, specifying a string like \obj\ or .obj will
exclude all files underneath the directory obj or all files with the ..obj
extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.
It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory






Let's see your precise command, and the contents of the
exclude file.



I've tried every permutation I can think of, and the results I get are:
Can't read file: XXX

0 File(s) copied

(where XXX is whatever file comes after the "/exclude:" switch.

The "donotcopy.txt" file is in the SOURCE directory, correct?

Also, if I just try to exclude file(s) by name - a la /EXCLUDE:ABC*.fil,
I
get the same result...
Can't read file: ABC*.fil

0 File(s) copied

What the heck is going on???



:


BINGO! We have a Winner! :-) :-)

RJB wrote:


At the risk of being redundantly monotonous and obtuse:

1) Create a notepad file
2) In the file, type:
ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
3) Save it as "filelist.txt"
4) In the xcopy command,
XCOPY \\PATH\SOURCE_SUBDIRECTORY /EXCLUDE filelist.txt
\\PATH\TARGET_SUBDIRECTORY /d /h /p /r /u /k /y

Close?


:



Inline,

RJB wrote:



Yeah, I gotta say, Pegasus, your solution gives me an ice cream

headache.

I still don't know if I get the "file listing" info...

From your initial post, it seems as if I am creating a file - called

"file1"

- and in that file it includes a list of excluded files.

CORRECT



But I probably just want to do
/EXCLUDE ABC*.fil

Wrong, should be like this

XCOPY /EXCLUDE FILELIST.TXT

FILELIST.TXT contents are ABC*.fil
one entry per line, you may have to experiment with it a bit.



Which is what your most recent post says. Right?

nope.


Anyway, I think I have enough info to experiment with.

Thanks,
 
I added
PATH \\SOURCEDRIVE\SHAREDDOCS

And now get
'xcopy' is not recognized as an internal or external command,
operable program or batch file

I guess I should have added %PATH% \\SOURCEDRIVE\SHAREDDOCS?

btw, here is the full command in my batch file:

XCOPY \\SOURCEDRIVE\SHAREDDOCS\MAILROOM /EXCLUDE:dontcopy.txt C:\RECEIVE

My goal is to take all of the files (save the five listed in
"dontcopy.txt"!) and copy them from a subdirectory called "Mailroom" on my
server to a subdirectory called "Receive" on my laptop.

(The file "dontcopy.txt" is in \\SOURCEDRIVE\SHAREDDOCS\MAILROOM)


Thanks,



Bob I said:
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in a
separate line in the files. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded from
being copied. For example, specifying a string like \obj\ or .obj will
exclude all files underneath the directory obj or all files with the .obj
extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.
It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory
 
With your "path" command you wrecked your existing path! The
correct way would be to type this:

path %path%;\\SourceDrive\ShareDocs.

However . . . adding SourceDrive\ShareDocs to the path makes no
sense, because SourceDrive\ShareDocs contains no executable
programs. The path is used to locate executable programs, not data
files.

Here is what you should type:

xcopy /y "\\SOURCEDRIVE\SHAREDDOCS\MAILROOM"
/EXCLUDE:"\\SourceDrive\ShareDocs\dontcopy.txt" "C:\RECEIVE\"

This is all one long line. Note the "/y" switch, the trailing backslash
after "c:\Receive\", and the sets of double quotes. Depending on
your actual names, they could be essential.


RJB said:
I added
PATH \\SOURCEDRIVE\SHAREDDOCS

And now get
'xcopy' is not recognized as an internal or external command,
operable program or batch file

I guess I should have added %PATH% \\SOURCEDRIVE\SHAREDDOCS?

btw, here is the full command in my batch file:

XCOPY \\SOURCEDRIVE\SHAREDDOCS\MAILROOM /EXCLUDE:dontcopy.txt C:\RECEIVE

My goal is to take all of the files (save the five listed in
"dontcopy.txt"!) and copy them from a subdirectory called "Mailroom" on my
server to a subdirectory called "Receive" on my laptop.

(The file "dontcopy.txt" is in \\SOURCEDRIVE\SHAREDDOCS\MAILROOM)


Thanks,



Bob I said:
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in a
separate line in the files. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded from
being copied. For example, specifying a string like \obj\ or .obj will
exclude all files underneath the directory obj or all files with the ..obj
extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.
It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory






Let's see your precise command, and the contents of the
exclude file.



I've tried every permutation I can think of, and the results I get are:
Can't read file: XXX

0 File(s) copied

(where XXX is whatever file comes after the "/exclude:" switch.

The "donotcopy.txt" file is in the SOURCE directory, correct?

Also, if I just try to exclude file(s) by name - a la /EXCLUDE:ABC*.fil,
I
get the same result...
Can't read file: ABC*.fil

0 File(s) copied

What the heck is going on???



:


BINGO! We have a Winner! :-) :-)

RJB wrote:


At the risk of being redundantly monotonous and obtuse:

1) Create a notepad file
2) In the file, type:
ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
3) Save it as "filelist.txt"
4) In the xcopy command,
XCOPY \\PATH\SOURCE_SUBDIRECTORY /EXCLUDE filelist.txt
\\PATH\TARGET_SUBDIRECTORY /d /h /p /r /u /k /y

Close?


:



Inline,

RJB wrote:



Yeah, I gotta say, Pegasus, your solution gives me an ice cream

headache.

I still don't know if I get the "file listing" info...

From your initial post, it seems as if I am creating a file - called

"file1"

- and in that file it includes a list of excluded files.

CORRECT



But I probably just want to do
/EXCLUDE ABC*.fil

Wrong, should be like this

XCOPY /EXCLUDE FILELIST.TXT

FILELIST.TXT contents are ABC*.fil
one entry per line, you may have to experiment with it a bit.



Which is what your most recent post says. Right?

nope.


Anyway, I think I have enough info to experiment with.

Thanks,
 
STILL a "Can't read file \\SOURCEDRIVE\Shareddocs\Mailroom\dontcopy.txt"

I know the "path" is OK, because if I exclude the "/EXCLUDE:" line, it
copies everything.

Also, I tried the line with an
"/EXCLUDE:\\Sourcedrive\Shareddocs\Mailroom\grace.bmp" - a picture of my
dog - and still got the "Can't read file ...grace.bmp"

So, it appears to be something it's not liking about "Exclude"?

Arggggghhhhh!






Pegasus (MVP) said:
With your "path" command you wrecked your existing path! The
correct way would be to type this:

path %path%;\\SourceDrive\ShareDocs.

However . . . adding SourceDrive\ShareDocs to the path makes no
sense, because SourceDrive\ShareDocs contains no executable
programs. The path is used to locate executable programs, not data
files.

Here is what you should type:

xcopy /y "\\SOURCEDRIVE\SHAREDDOCS\MAILROOM"
/EXCLUDE:"\\SourceDrive\ShareDocs\dontcopy.txt" "C:\RECEIVE\"

This is all one long line. Note the "/y" switch, the trailing backslash
after "c:\Receive\", and the sets of double quotes. Depending on
your actual names, they could be essential.


RJB said:
I added
PATH \\SOURCEDRIVE\SHAREDDOCS

And now get
'xcopy' is not recognized as an internal or external command,
operable program or batch file

I guess I should have added %PATH% \\SOURCEDRIVE\SHAREDDOCS?

btw, here is the full command in my batch file:

XCOPY \\SOURCEDRIVE\SHAREDDOCS\MAILROOM /EXCLUDE:dontcopy.txt C:\RECEIVE

My goal is to take all of the files (save the five listed in
"dontcopy.txt"!) and copy them from a subdirectory called "Mailroom" on
my
server to a subdirectory called "Receive" on my laptop.

(The file "dontcopy.txt" is in \\SOURCEDRIVE\SHAREDDOCS\MAILROOM)


Thanks,



Bob I said:
From the help
" /EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string should be in a
separate line in the files. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded from
being copied. For example, specifying a string like \obj\ or .obj will
exclude all files underneath the directory obj or all files with the .obj
extension respectively."

So
/EXCLUDE:dontcopy.txt
NOT
/EXCLUDE dontcopy.txt

Since where you put the file resulted in "can't read xxx", I suggest
putting "dontcopy.txt" in a directory that is listed in the PATH listing.

RJB wrote:

It's all listed in the screens above

The donotcopy.txt contains a list - one per line - of each exclded file.

The long and short is

xcopy \\destinationpath\subdir /EXCLUDE donotcopy.txt
\\receivingpath\subdirectory






Let's see your precise command, and the contents of the
exclude file.



I've tried every permutation I can think of, and the results I get are:
Can't read file: XXX

0 File(s) copied

(where XXX is whatever file comes after the "/exclude:" switch.

The "donotcopy.txt" file is in the SOURCE directory, correct?

Also, if I just try to exclude file(s) by name - a la /EXCLUDE:ABC*.fil,
I
get the same result...
Can't read file: ABC*.fil

0 File(s) copied

What the heck is going on???



:


BINGO! We have a Winner! :-) :-)

RJB wrote:


At the risk of being redundantly monotonous and obtuse:

1) Create a notepad file
2) In the file, type:
ABC Jackson.fil
ABC Smith.fil
ABC Alias.fil
ABC Lost.fil
ABC Polar.fil
3) Save it as "filelist.txt"
4) In the xcopy command,
XCOPY \\PATH\SOURCE_SUBDIRECTORY /EXCLUDE filelist.txt
\\PATH\TARGET_SUBDIRECTORY /d /h /p /r /u /k /y

Close?


:



Inline,

RJB wrote:



Yeah, I gotta say, Pegasus, your solution gives me an ice cream

headache.

I still don't know if I get the "file listing" info...

From your initial post, it seems as if I am creating a file - called

"file1"

- and in that file it includes a list of excluded files.

CORRECT



But I probably just want to do
/EXCLUDE ABC*.fil

Wrong, should be like this

XCOPY /EXCLUDE FILELIST.TXT

FILELIST.TXT contents are ABC*.fil
one entry per line, you may have to experiment with it a bit.



Which is what your most recent post says. Right?

nope.


Anyway, I think I have enough info to experiment with.

Thanks,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top