Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 嵌套批处理文件中for语句中的if exist语句_Batch File_If Statement_For Loop_Xcopy - Fatal编程技术网

Batch file 嵌套批处理文件中for语句中的if exist语句

Batch file 嵌套批处理文件中for语句中的if exist语句,batch-file,if-statement,for-loop,xcopy,Batch File,If Statement,For Loop,Xcopy,大家早上好。我有一个批处理文件,用于搜索网络PC用户文件夹中的XML文件,然后将这些文件复制到网络位置。但是,它会为所有用户复制文件夹,而不管他们是否有相关文件。我想做的是,如果包含这些文件的目录存在,只为该用户创建一个文件夹 下面是代码的样子: for /d %%g in ("\\computer.domain\c$\users\*") do ( xcopy /d /q /c /i /y "%%g\AppData\Roaming\Program\Folder\*.xml" "\\server.

大家早上好。我有一个批处理文件,用于搜索网络PC用户文件夹中的XML文件,然后将这些文件复制到网络位置。但是,它会为所有用户复制文件夹,而不管他们是否有相关文件。我想做的是,如果包含这些文件的目录存在,只为该用户创建一个文件夹

下面是代码的样子:

for /d %%g in ("\\computer.domain\c$\users\*") do (
xcopy /d /q /c /i /y "%%g\AppData\Roaming\Program\Folder\*.xml" "\\server.domain\shared_folder\%%g"
)
它可以完美地工作,但是可以为每个用户创建一个用户文件夹。我只想为用户创建一个文件夹,其中Appdata\Roaming\Program\folder首先包含XML文件。但我不知道如何让if-exists语句在for语句中工作。 此外,这会创建一个类似computer.domain/c$/users/user的目录结构。如果有一种方法可以去掉c$/users,那么它就是computer.domain/user/file.xml,那将更令人惊讶

提前谢谢

更新这里是批处理使用的完整代码。它对每台计算机重复:

net use k: \\computer.domain\c$\users
for /d %%g in ("k:\*") do (
forfiles /P "%%g\AppData\Roaming\Program\Folder" /m *.xml /D -7 /C "cmd /C del @path"
)
net use k: /delete
for /d %%g in ("computer.domain\c$\users\*") do (if exist "%%g\Appdata\Roaming\Program\Folder\*.xml" (
xcopy /d /q /c /y "%%g\AppData\Roaming\Program\Folder\*.xml" "\\server.domain\shared_folder\%%~nxg\")
)
forfiles /P /S "M:\MAS500\endicia-postback-archive" /m *.xml /D -60 /C "cmd /C del @path"
整个功能是删除一周或更长时间的XML文件,然后复制其余文件,然后从服务器上删除两个月或更长时间的文件。该行仅在末尾,但其他行对每台计算机重复。 也许有更好的办法?当我以这种方式运行它时,似乎没有为所有符合条件的用户获取文件夹。
再次感谢

在更改路径后测试:

这里只是说明一下,您使用/d开关将限制复制的文件

@echo off
for /d %%g in ("\\computer.domain\c$\users\*") do (
   if exist "%%g\AppData\Roaming\Program\Folder\*.xml" (
      xcopy /d /q /c /y "%%g\AppData\Roaming\Program\Folder\*.xml" "\\server.domain\shared_folder\computer.domain\%%~nxg\"
   )
)

哇,一石二鸟,这么快。非常感谢你。看起来效果很好。正是我想要的。谢谢,谢谢=-有没有比d/d更好的方法?此外,该命令本身测试良好,但当我将其添加到批处理文件的其余部分时,似乎没有得到预期的所有结果。它似乎不喜欢某些计算机的.domain扩展名。我刚把它拿出来,现在一切都好了。再次感谢您的帮助!