测试 IF 文件是否存在,ELSE xcopy 这两个文件

2024-01-20

大家早。

因此,我花了几个小时试图将其他帖子的各种回复拼凑到我自己的代码中,以便看看是否可以获得有用的东西。不许去。我已经完全迷失在酱汁中了,所以我现在必须向你寻求帮助。

背景: 操作系统:Windows 10 我每天晚上使用程序 text2folders.exe 在辅助驱动器上创建 20-30 个新文件夹。 首先,我有一个基本文件“aGallery-dl.bat”,我使用 xcopy 批处理文件填充每个文件夹。其次,我时不时地使用相同的 xcopy 更新源文件“aGallery-dl.bat”,这会覆盖旧的目标文件,填充所有文件夹使用最新的“aGallery-dl.bat”(无论他们是否需要)。一切都很好。

@echo off
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy /y /d ".\aGallery-dl.bat" "%%a\"

我最近决定向每个文件夹添加两个新文件,并扩展了我的 xcopy 以包含这些文件。一切都很好。

@echo off
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy /y /d ".\aGallery-dl.bat" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder.jpg" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder2.jpg" "%%a\"

文件夹.jpg一个红色的大X https://i.stack.imgur.com/M3CsM.jpg

文件夹2.jpg一大黄!标记 https://i.stack.imgur.com/Jq0gm.jpg

当我选择在给定文件夹(同样是100个文件夹之一)中运行“aGallery-dl.bat”时,它首先删除Folder.jpg,然后将Folder2.jpg重命名为Folder.jpg。这具有将红色 X 替换为黄色的效果!在文件资源管理器父文件夹中查看文件夹时。其次,它调用“gallery-dl.exe”。我使用从红色到黄色的方式让我知道我至少运行过一次“aGallery-dl.bat”。一切都很好。

rem @echo off
del .\Folder.jpg
ren .\Folder2.jpg Folder.jpg
FOR /F %%i IN ('cd') DO set FOLDER=%%~nxi
"C:\Program Files (x86)\gallery-dl\gallery-dl.exe" -d "U:\11Web\gallery-dl" --download-archive ".\aGDB.sqlite3" "https://www.deviantart.com/"%FOLDER%"/gallery/all"
del .\Folder.jpg

如果“aGallery-dl.bat”成功完成,它最终会删除Folder.jpg(当前为黄色!),并且现在该文件夹的代表性内容(通常是DeviantArt .jpg)可见。

Problem:当我必须重新运行原始 xcopy 命令来更新所有文件夹中的“aGallery-dl.bat”时,Folder.jpg 和 Folder2.jpg 将被重新复制到所有文件夹,从而达不到通过“删除它们一次的目的” aGallery-dl.bat”。我不想返回并在 100 个文件夹中间歇性地重新运行“aGallery-dl.bat”(同样,仅限那些至少运行过一次 aGallery-dl.bat 的文件夹)。我需要某种类型的测试,如果“aGallery-dl.bat”已经存在于目标文件夹中,请勿复制Folder.jpg和Folder2.jpg(又名模糊示例),如下所示。

*********************************Some sort of test statement here!!!***********************

:aGallery-dlPresent
GOTO eof

:aGallery-dlNotPresent
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder.jpg" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder2.jpg" "%%a\"
GOTO eof

:eof

我在下面找到了一个有希望的候选测试声明(以原始形式从我在其他帖子中读到的内容/位置复制),但正在寻找想法/替换,因为我不知道如何修改/注入/实现以下内容从事上述工作。

If exist \\%DIR%\%Folder%\123456789.wav xcopy \\%DIR%\%Folder%\123456789.wav D:\%New Folder%\ /y

让 XCopy 复制文件并且不覆盖前一个文件(如果存在)(不提示) https://stackoverflow.com/questions/5152835/having-xcopy-copy-a-file-and-not-overwrite-the-previous-one-if-it-exists-withou

注意:下面是它应该是什么样子的模糊近似(除非有正确的-测试语句-)。

rem @echo off
*********************************Some sort of test statement here!!!***********************

:aGallery-dlPresent
GOTO eof

:aGallery-dlNotPresent
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder.jpg" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder2.jpg" "%%a\"
GOTO eof

:eof

for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy /y /d ".\aGallery-dl.bat" "%%a\"

复制文件的命令是COPY。它是Windows命令处理器的内部命令cmd.exe. XCOPY是扩展文件和目录复制可执行文件在目录中%SystemRoot%\System32自 Windows Vista 以来,它已被弃用,因为有更强大的功能ROBOCOPY这是具有完整限定文件名的%SystemRoot%\System32\robocopy.exe.

没有必要使用XCOPY or ROBOCOPY对于这个简单的文件复制任务。COPY源文件就足够了aGallery-dl.bat, Folder.jpg and Folder2.jpg没有隐藏属性设置,并且目标目录中的相同文件没有设置只读属性。

.\引用当前目录,可以是任何目录。双击批处理文件时,Windows 资源管理器会将批处理文件的目录设置为当前目录。但这几乎是运行批处理文件的唯一方法,在该方法上,执行的批处理文件的目录自动设置为当前目录(批处理文件存储在使用 UNC 路径访问的网络资源上除外)。

%~dp0引用批处理文件的路径。此路径始终以反斜杠结尾,这意味着在将批处理文件路径与文件或文件夹名称连接时不需要额外的反斜杠。的用法%~dp0使得可以引用与执行的批处理文件相同的目录中的文件,而与执行批处理文件时的当前目录无关。

您的任务所需的批处理文件是:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("U:\11Web\gallery-dl\deviantart\*") do (
    if not exist "%%I\aGallery-dl.bat" (
        copy "%~dp0Folder.jpg" "%%I\"
        copy "%~dp0Folder2.jpg" "%%I\"
    )
    copy /Y "%~dp0aGallery-dl.bat" "%%I\"
)
endlocal

文件/文件夹名称必须包含在"如果包含空格或这些字符之一&()[]{}^=;!'+,`~。因此,所有文件/文件夹名称都在此批处理文件中用双引号引起来,尽管批处理文件内没有文件/文件夹名称包含空格或列表中的字符之一。在编写批处理文件时,了解 Windows 命令处理器处理命令行后命令行的样子非常重要。请参阅以下主题:

  • Windows 命令解释器 (CMD.EXE) 如何解析脚本? https://stackoverflow.com/questions/4094699/
  • 如何调试批处理文件? https://stackoverflow.com/a/42448601/3074564

Windows 解释*.*就像只是*这意味着任何文件或文件夹名称。因此,只写就足够了*并省略.*.

请注意for /D忽略具有隐藏属性集的目录。

批处理文件首先检查每个子文件夹是否不包含批处理文件aGallery-dl.bat。在这种情况下,它复制两个文件Folder.jpg and Folder2.jpg从执行批处理文件的目录到当前子目录U:\11Web\gallery-dl\deviantart.

然后是批处理文件aGallery-dl.bat从执行批处理文件的目录复制到当前子目录U:\11Web\gallery-dl\deviantart与其在目标目录中的存在无关。

要了解所使用的命令及其工作原理,请打开命令提示符 https://www.howtogeek.com/235101/10-ways-to-open-the-command-prompt-in-windows-10/窗口中,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • call /?...解释%~dp0...参数 0 的驱动器和路径...完整的批处理文件路径。
  • cmd /?...输出 Windows 命令处理器执行批处理文件的帮助。
  • copy /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • setlocal /?

另请参阅章节Issue 6 and Issue 7 in 这个答案 https://stackoverflow.com/a/60686543/3074564为什么使用setlocal EnableExtensions DisableDelayedExpansion and endlocal虽然默认情况下没有必要以及为什么使用I代替a作为循环变量虽然a也会在这里工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试 IF 文件是否存在,ELSE xcopy 这两个文件 的相关文章

  • if 子句中的多个条件

    如果我有一个 if 语句需要满足这些要求 if cave gt 0 training gt 0 mobility gt 0 sleep gt 0 有没有办法说它们都大于零 只是为了更高效的 DRY 代码 就像是 if cave traini
  • 使用 NUnit 或 XUnit 时如何将参数传递给 dotnet test 命令

    我正在使用 C 和 NET Core Selenium 和 NUnit 开发一些端到端测试 现在我想写一个登录测试用例 我的测试是从控制台开始的 只需使用dotnet test命令 我只想将用户名和密码传递给此命令并在我的测试中获取它们 我
  • Cucumber 是否不需要编写单元测试?

    我对 Ruby ROR 可用的测试框架数量之多感到有点困惑 我最近看了黄瓜轨道广播 http railscasts com episodes search cucumber并发现它们非常有趣 所以我开始玩游戏 然后努力从概念上考虑在哪里进行
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • 使用批处理文件挂载 .iso 文件 win windows 8 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个游戏 已备份到 iso 文件 笔记本电脑中的磁盘驱动器很吵 并且希望从单个快捷方式运行它 而不必每次都挂载 iso 文件 我运行
  • 以不可见模式运行主bat文件

    我有一个大师 bat文件有 call file1 bat call file2 bat call file3 bat call file4 bat 我想在我的 Windows Server 2008 上安排它以静默 不可见模式运行 我正在寻
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do
  • 如何从 Play WSClient 的字符串创建 WSResponse 对象

    文档 https www playframework com documentation 2 4 x JavaTestingWebServiceClients Mock the web service建议使用模拟Web服务测试基于WSCli
  • 如何在 OS X 上的旧版 Safari 中测试我的网站?

    苹果似乎不提供旧版本 Safari 的下载 我什至不确定它们是否会安装在 Mac OS X 上 因为 Safari 似乎是操作系统的一部分 就像 Windows 上的 Internet Explorer 一样 有什么方法可以在旧版本的 Sa
  • 在 pytest 中,如何判断测试是否失败? (来自“请求”)

    我正在使用 Selenium 和 PYTEST 来测试网站 我想在测试失败时 并且仅在测试失败时 截取页面的屏幕截图 有什么办法可以做到这一点吗 当谈到这个时 文档很安静 或者我找不到它 我认为它会是这样的 request function
  • 如何限制Cargo.toml中的测试线程数?

    我的测试共享公共资源并且无法同时执行 这些测试失败cargo test 但与RUST TEST THREADS 1 cargo test 我可以修改测试以等待全局互斥体 但如果有任何更简单的方法来强制 我不想让它们混乱cargo为我设置这个
  • 有没有更有效的方法通过ffmpeg批量添加水印和加入视频?

    我有这个批处理文件 使用 ffmpeg 在我的视频中添加徽标 然后添加简介 但需要 10 小时到一天的时间 具体取决于我需要添加水印的数量 是否有更有效的方法来实现此目的 视频有时具有不同的分辨率 因此我无法删除到 1280 720 尺寸的
  • 如何测试哈希函数?

    有没有办法测试哈希函数的质量 我希望在哈希表中使用时具有良好的分布 如果这可以在单元测试中验证 那就太好了 EDIT 为了澄清 我的问题是我已经使用了longJava 中的值的方式是第一个 32 位编码一个 ID 第二个 32 位编码另一个
  • MySQL查看数据是否为NULL

    我需要在 Select 中放置一个 Case 来检查我添加到视图中的数据是否为 NULL 在这种情况下我希望它只输入零 或者不输入零 你的意思是这样的吗 SELECT IF field IS NULL 0 field 还有 IFNULL S
  • 如何在 Rails ActiveRecord 中的日期指定小于今天的条件

    我正在尝试找出如何提取我的集合中的所有记录的字段publish是真的并且expires比今天少 我有以下内容 但我认为小于部分不起作用 有人可以指出我正确的轨道吗 Announcement where publish true expire
  • 使用 Protractor 检查浏览器控制台中没有错误

    我正在使用 Protractor 来测试 AngularJS 我想检查在测试结束时是否没有发生未捕获的异常并打印到浏览器控制台 有没有一种简单的方法可以做到这一点 如果您将 Protractor 与 Jasmine 一起使用 请使用以下代码
  • 如何将非并行junit参数化测试转变为并行运行

    我编写了一个参数化的junit测试 有没有任何内置方法可以使其并行运行 任何 annoation例如 如果没有 我唯一的方法就是手动编写 你会如何管理junit java中的线程池 图书馆JUnit工具箱 https github com
  • 对 ruby​​ 命令行应用程序的代码进行单元测试 - 如何模拟/通过 ARGV

    我有一个命令行应用程序 它使用 thor 来处理选项的解析 我想使用 test unit 和 或 minitest 对代码进行命令行功能的单元测试 我似乎无法弄清楚如何确保 ARGV 数组 通常会保存命令行中的选项 保存我的测试选项 以便可
  • 关于如何在 PHPUnit 中使用 setUp() 和tearDown() 有真实的例子吗?

    Methods setUp and tearDown 在每次测试之前和之后调用 但实际上 有没有任何真实的例子说明我为什么需要这个 检查其他人的测试 我总是看到类似的东西 public function setUp this gt test
  • 如何在批处理文件中解析带有特殊分隔符的文件?

    我想使用批处理来解析一个如下所示的文件 a string containing various characters and spaces 1 b string containing various characters and space

随机推荐