2014-06-30 1198 views
3

我试图从一个共享驱动器复制另一个共享驱动器的今天修改的文件。 但是当我执行批处理文件时,它显示以下错误。cmd不支持当前目录下的unc路径

CMD不支持UNC路径,当前目录

的脚本如下

@echo off 


Set PhotosrcPath=\\hqcp-appsvr01\Files\ApplicationDocuments\AppDocs\49\PHOTO\ 
Set PhotodestPath=\\hqcp-appsvr02\Files\ApplicationDocuments\AppDocs\49\PHOTO\ 

::Copy photoFiles from server1 to server2 Made Or Modified Today 


@echo off 

set source=%d%%PhotosrcPath% 
set dest=%d%%PhotodestPath% 


pushd "%source%" 
set t=%date:~4% 
echo %t% 
for /f %%a in ('dir /b /a-d /o-d') do call :PROCESS "%%a" 
goto :eof 
popd 

:PROCESS 
for /f %%j in ('echo %~t1') do set d=%%j 
if "%d%"=="%t%" Xcopy /y %1 "%dest%" 
goto :eof 
+0

是的 - 我只能提供一种解决方法 - 您需要将src和dest路径映射到驱动器号,然后使用这些驱动器号代替。 – Bob

+0

你如何做那个映射? – subash

+0

但我是这些脚本的新手,你能帮我把src和dest路径映射到驱动器盘符吗? – subash

回答

4
net use X: \\hqcp-appsvr01\Files\ApplicationDocuments\AppDocs\49\PHOTO 
net use Y: \\hqcp-appsvr02\Files\ApplicationDocuments\AppDocs\49\PHOTO 

::Copy photoFiles from server1 to server2 Made Or Modified Today 

@echo off 

set source=X:\ 
set dest=Y:\ 

pushd "%source%" 
set t=%date:~4% 
echo %t% 
for /f %%a in ('dir /b /a-d /o-d') do call :PROCESS "%%a" 
popd 
net use Y: /d /y 
net use X: /d /y 
goto :eof 

:PROCESS 
for /f %%j in ('echo %~t1') do set d=%%j 
if "%d%"=="%t%" Xcopy /y %1 "%dest%" 
goto :eof 

类似的东西可能会奏效。查找NET USE获取更多信息。

我很好奇你为什么不仅仅使用XCOPY--我认为/ D命令可以做你需要的。我也会投入一个/ M。

xcopy \\hqcp-appsvr01\Files\ApplicationDocuments\AppDocs\49\PHOTO\*.* \\hqcp-appsvr02\Files\ApplicationDocuments\AppDocs\49\PHOTO\*.* /y /d /m 
+0

但是[Microsoft推送文档](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/pushd.mspx?mfr=true&tduid=(df0dead6460f26ca30517cce6f76eb9e)(266696) (1503186)(skim725X6551X1fa61b02269089e3b3870af3e7622078)())说:“如果指定了一个网络路径,pushd命令暂时将第一个未使用的驱动器号(以Z开头:)指定给指定的网络资源”。那么你的'net use'语句不是不必要的吗? –

1

没有理由使用pushd。 for循环的以下修改可能就足够了。

for /f %%a in ('dir "%source%" /b /a-d /o-d') do call :PROCESS "%%a" 
+0

这是正确的 - xcopy支持网络路径 - 我甚至没有想过这个。 – Bob

相关问题