Ok, my last post on this today....I think :)
for /f "tokens=*" %i in ('dir * WORDS_TO_SEARCH * /s/ad/b') do robocopy /mir
"%i" "DESTINATION_PATH\%~pni"
Adding the %~pni will prevent every copy from overwriting the previous. This
will recreate your entire tree at the destination similar to Andrew's script
below which may or may not be what you want. You can change it to \%~ni so
that each source directory gets copied to the root of the destination, but any
duplicates will overwrite each other so /mir may not be the best option.
As far as paths that are too long, robocopy will handle paths up to 32,000
characters, but the dir command is the limiting factor here. In any case, you
should be able to see the paths that don't get copied and do those manually,
but the others should work.
From: Crawford, Scott [mailto:[email protected]]
Sent: Wednesday, July 20, 2011 6:50 PM
To: NT System Admin Issues
Subject: RE: file searching and copying
Nice to see pushd and popd making an appearance :)
Few nits and questions, just to make sure I'm not missing something:
1. The echo in front of xcopy shouldn't be there. I'm sure it's just
there for troubleshooting and left as an oversight. The /s /e is redundant,
right?
2. I'm not very practiced with the enhanced ~ substitution, but couldn't
the SET @DIR=%%~fpv line omit the p?
3. I think the ECHO DEST: %@DEST%\%%~pv line has an extra \
4. I think the xcopy's destination parameter ("%@DEST%%%~pv") needs to be
"%@DEST%%%~pnv". Without it, the files get copied into the corresponding
parent on the destination.
5. Is there any way to get the parentheses code blocks work from the
command line or do they need to be inside of a .bat? I've tried stringing the
commands together with &&, but met with limited success.
Possible drawback to this method:
The destination path will contain the full path of the source. For instance, if
the source root is C:\a\b\c and it contains a folder called Search_Term, and we
wan't the destination to be D:\, when we run the script, the destination will
contain D:\a\b\c\Search_Term, which may not be the goal.
In the end, I don't think this is getting any better results the my original
line. The 2>NUL is just hiding the failures.
Thanks for the script though, it was fun to digest :)
From: Andrew S. Baker
[mailto:[email protected]]<mailto:[mailto:[email protected]]>
Sent: Wednesday, July 20, 2011 3:06 PM
To: NT System Admin Issues
Subject: Re: file searching and copying
How long are the paths?
There are other ways to handle this, btw...
Try the following snippet. It should handle long folders even if Windows
complains about them
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET @SOURCE=%SystemDrive%
SET @DEST=D:\SomePlace
SET @FIND=PrivacIE
:Main
for /f "tokens=*" %%v in ('dir /ad /b /s
"%@SOURCE%\*.*<mailto:%25@SOURCE%25\*.*>" 2^>NUL ^| FIND /I "%@FIND%"') do (
SET @DIR=%%~fpv
ECHO.
ECHO SOURCE: !@DIR!
ECHO DEST: %@DEST%\%%~pv
PUSHD !@DIR!
echo XCOPY *.* "%@DEST%%%~pv" /S /E /R /Y
ECHO.
POPD
)
:ExitBatch
ENDLOCAL
ASB
http://about.me/Andrew.S.Baker
Harnessing the Advantages of Technology for the SMB market...
On Wed, Jul 20, 2011 at 2:24 PM, Jeff Bunting
<[email protected]<mailto:[email protected]>> wrote:
Thanks all. Scott's suggestion is close and at least got me pointed in the
right direction. Some of the paths are too long for DIR which throws a wrench
in the works, so I'm going to have to rely on windows search for now.
Powershell, unfortunately, currently isn't an option.
Jeff
On Wed, Jul 20, 2011 at 12:23 PM, Andrew S. Baker
<[email protected]<mailto:[email protected]>> wrote:
Good one, Scott.
Jeff, remember to add a % to each variable if used in a batch file, vs the
command line.
ASB
http://about.me/Andrew.S.Baker
Harnessing the Advantages of Technology for the SMB market...
On Wed, Jul 20, 2011 at 12:13 PM, Crawford, Scott
<[email protected]<mailto:[email protected]>> wrote:
For /f "tokens=*" %i in ('dir *WORDS_TO_SEARCH* /s/a/b/ad') do robocopy /mir
"%i" DESTINATION_PATH
This will search a folder tree for directorys. Change the dir command to
eliminate the /s if you only want to search the root.
From: Jeff Bunting
[mailto:[email protected]<mailto:[email protected]>]
Sent: Wednesday, July 20, 2011 11:01 AM
To: NT System Admin Issues
Subject: file searching and copying
I'm attempting to search for particular words in a directory name (must use
wildcards!), and, if found, copy the the directory tree while maintaining its
structure to another directory.
Are there any native tools (or reskit like robocopy) that can accomplish this
somewhat easily?
thanks,
Jeff
~ Finally, powerful endpoint security that ISN'T a resource hog! ~
~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~
---
To manage subscriptions click here:
http://lyris.sunbelt-software.com/read/my_forums/
or send an email to
[email protected]<mailto:[email protected]>
with the body: unsubscribe ntsysadmin
~ Finally, powerful endpoint security that ISN'T a resource hog! ~
~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~
---
To manage subscriptions click here:
http://lyris.sunbelt-software.com/read/my_forums/
or send an email to
[email protected]<mailto:[email protected]>
with the body: unsubscribe ntsysadmin
~ Finally, powerful endpoint security that ISN'T a resource hog! ~
~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~
---
To manage subscriptions click here:
http://lyris.sunbelt-software.com/read/my_forums/
or send an email to
[email protected]<mailto:[email protected]>
with the body: unsubscribe ntsysadmin
~ Finally, powerful endpoint security that ISN'T a resource hog! ~
~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~
---
To manage subscriptions click here:
http://lyris.sunbelt-software.com/read/my_forums/
or send an email to
[email protected]<mailto:[email protected]>
with the body: unsubscribe ntsysadmin
~ Finally, powerful endpoint security that ISN'T a resource hog! ~
~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~
---
To manage subscriptions click here:
http://lyris.sunbelt-software.com/read/my_forums/
or send an email to [email protected]
with the body: unsubscribe ntsysadmin