我想xcopy
在网络路径上使用。我确实这么做了。
问题是我想使用一个/exclude
选项。但文件位于网络路径中。但网络路径中有空格(s:\my path
)。
这就是我使用的它正在发挥作用现在没有 /exclude
(S:
是映射的网络文件):
xcopy "S:\TI\My Path" "C:\Path" /S /I /D /Q /Y
我尝试添加一个/exclude
文件本地和有用很好(我想到我必须使用 8.3 名称):
xcopy "S:\TI\My Path" "C:\Path" /S /I /D /Q /Y /exclude:c:\MyConf~1\cfg.txt
但当我移动到网络路径时,同样的方法不起作用。我认为主要原因是网络路径没有 8.3 名称 dir /x
。
xcopy "S:\TI\My Path" "C:\Path" /S /I /D /Q /Y /exclude:s:\MyConf~1\cfg.txt
无法读取文件:s:\MyConf~1\cfg.txt
上面的代码是我从巴西葡萄牙语翻译过来的,可能与xcopy
返回的结果不完全一致。但我想你应该明白了。
我尝试过使用未映射的版本,但实际上并不实用并且没有起作用。
xcopy "S:\TI\My Path" "C:\Path" /S /I /D /Q /Y /exclude:\\server\MyConf~1\cfg.txt
有什么方法可以实现这一点吗xcopy
?有没有不需要在每台电脑上安装的同类产品?
答案1
我在用户的想法的帮助下想出了一个不太优雅的解决方案S. 布罗特斯给了我评论。
我找到了一个代码来查看与该信件相关的完整 UNC 路径这里并做了一些改变。
我的代码找到了我已经映射的字母的完整 UNC 路径(在本例中s:
)获取了完整的 UNC 路径并连接起来。
之后我将其映射到未使用的字母并在exclude
参数中使用它:
@REM Get the full UNC path, maps it to a letter, use the letter in the exclude parameter and exludes the mapped letter
cls
@set _NetworkPath=
@set _newLetterDrive=y
@REM finds the complete network path mapped to s:
@pushd "s:"
@for /f "tokens=2" %%i in ('wmic path win32_mappedlogicaldisk get deviceid^, providername ^| findstr /i "%CD:~0,2%"') do @(set _NetworkPath=%%i%CD:~2%)
@REM concatenates the actual network path with the added folder I need
@REM @echo. Debug info %_NetworkPath%
@set _newPath="%_NetworkPath%TI\My configs"
@REM maps deep into the folder to a known not used letter
net use %_newLetterDrive%: %_newPath%
@REM finally call the xcopy with the exclude file pointed out directly by y:
@REM @echo Debug info %_newPath%
xcopy "S:\TI\My Path" "C:\Path" /S /I /D /Q /Y /exclude:%_newLetterDrive%:\cfg.txt
@REM removes the used letter
net use %_newLetterDrive%: /delete /yes