【问题标题】:Nest if exist statement within for statement in batch file在批处理文件中的 for 语句中嵌套 if 语句
【发布时间】:2014-04-30 17:01:40
【问题描述】:

大家早上好。我有一个批处理文件,它在网络 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 文件,然后复制剩余的文件,然后从服务器上删除两个月或更早的文件。该行仅在末尾,但每台计算机都会重复其他行。
也许有更好的方法来解决它?当我以这种方式运行它时,似乎我没有为所有符合条件的用户获得一个文件夹。 再次感谢!

【问题讨论】:

    标签: batch-file if-statement for-loop xcopy


    【解决方案1】:

    修改路径后测试:

    只是在这里评论说您使用/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 更好的方法?此外,该命令本身测试良好,但是当我将它添加到我的批处理文件的其余部分时,似乎我没有得到我期望的所有结果。
    • 它看起来不喜欢某些计算机的 .domain 扩展名。我刚把它拿出来,现在一切都很好。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多