热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

具有多个if/copy组合的post-build事件仅在第一个文件不存在时执行

如何解决《具有多个if/copy组合的post-build事件仅在第一个文件不存在时执行》经验,为你挑选了1个好方法。

鉴于bin\内部德尔福项目中包含的文件目录Cert.pemKey.pem低于德尔福后生成事件的唯一副本,如果这两个文件C:\Binaries\Cert.pem不存在:

if not exist $(OUTPUTDIR)Cert.pem (copy bin\Cert.pem $(OUTPUTDIR))
if not exist $(OUTPUTDIR)Key.pem (copy bin\Key.pem $(OUTPUTDIR))

一旦C:\Binaries\Cert.pem存在,Key.pem永远不会复制该文件.

如何在后期制作活动中解决这个问题?

编辑:与我的2014年帖子不同,这确实可以使用括号.请参阅下面的答案.



1> Jeroen Wiert..:

Delphi后构建事件的问题在于它们不是批处理文件.

这意味着看起来像行的语句被Delphi IDE连接成一个大的&&符号分隔语句.这确保命令按顺序执行,根据命令重定向,管道 - Windows CMD - SS64.com:

commandA &  commandB      Run commandA and then run commandB

所以这是执行的实际语句:

if not exist $(OUTPUTDIR)Cert.pem (copy bin\Cert.pem $(OUTPUTDIR))&if not exist $(OUTPUTDIR)Key.pem (copy bin\Key.pem $(OUTPUTDIR))

这里的问题是,现在第二个if被视为第一个if语句的"then"部分的延续:第二个语句if$(OUTPUTDIR)Cert.pem存在时永远不会执行.

有用的是一个鲜为人知的功能,您可以将每个命令包装在括号内.通常这是为了允许一个命令跨越多行(特别是for iffor.. do循环),但它也适用于一行.

包含if括号内的语句的每一行确保它们成为不影响其他行的独立语句,即使它们与&符号分隔符连接在一起.

在对话框中,它看起来像这样:

(if not exist $(OUTPUTDIR)Cert.pem (copy bin\Cert.pem $(OUTPUTDIR)))
(if not exist $(OUTPUTDIR)Key.pem (copy bin\Key.pem $(OUTPUTDIR)))

这样,IDE将其转换为一个语句:

(if not exist $(OUTPUTDIR)Cert.pem (copy bin\Cert.pem $(OUTPUTDIR)))&(if not exist $(OUTPUTDIR)Key.pem (copy bin\Key.pem $(OUTPUTDIR)))

现在它按预期工作:

$(OUTPUTDIR)Cert.pem存在,但$(OUTPUTDIR)Key.pem没有,只是$(OUTPUTDIR)Cert.pem被复制

什么$(OUTPUTDIR)Cert.pem时候存在但确实存在$(OUTPUTDIR)Key.pem,只$(OUTPUTDIR)Key.pem复制

当两者都不存在时,两者都被复制

当两者都存在时,都不会被复制

在编写我的2014年后Delphi预建/预链接/ postbuild事件时,我不知道这个"技巧" ,所以我需要为它编写更新.

搜索批处理文件括号网站:microsoft.com -site:social.technet.microsoft.com -site:answers.microsoft.com没有在官方文档中显示它,但我并不感到惊讶,因为它变得歇斯底里,而不是设计的.或者像Old New Thing属性h2g2:

就像宇宙一样,如果有人完全理解批处理,那么语言将立即被无限怪异和更复杂的自身版本所取代.这显然至少发生过一次;)

我能找到的最好的文档是在括号/括号 - Windows CMD - SS64.com:

括号可用于跨多行分割命令.这可以使代码更具可读性.将为代码块评估变量,就像命令是单行一样.

 (command)

 (
  command
  command )

在括号内打破的事情CMD shell在评估括号时不会使用任何强大的智能,因此例如下面的命令将失败:

IF EXIST MyFile.txt (ECHO Some(more)Potatoes)

...


推荐阅读
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
author-avatar
胡慧君孟勋欣怡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有