自移动批处理文件

2023-12-21

我正在寻找一种方法让批处理文件在执行后将其自身移动到已知位置。自动移动——似乎是最恰当的名字,但我确信它有一个技术术语。我想移动批处理文件after所有其他代码都已运行。

move "C:\temp\move_me.bat"  "D:\temp\move_me.bat"  

其中 move_me.bat 是放置在 c:\temp 中的同名批处理文件,将移动到 d:\temp。

我收到错误

找不到批处理文件。

即使批处理文件移动了位置。所以我有点困惑。我是否需要抑制错误,或者最好复制批处理文件并删除源?或者有更好的方法吗?


The Windows command prompt cmd does not cache batch files in memory, it reads them from the file line by line1. Therefore you receive an error as soon as the move command has been finished, because the file cannot be found any more.

您可以像这样调用批处理文件来抑制错误:

"C:\temp\move_me.bat" 2> nul

但这也无意中抑制了所有其他错误消息。

不管怎样,也许下面的方法适合你——这是脚本C:\temp\move_me.bat:

if /I "%~dp0"=="D:\temp\" exit /B
rem // (some other code here...)
copy "%~f0" "D:\temp\%~nx0"
"D:\temp\%~nx0" & del "%~f0"

首先,检查当前运行的批处理文件的位置D:\temp\;如果相等,则立即终止批处理文件。

Finally, the original batch file (accessed by %~f0 http://ss64.com/nt/syntax-args.html2) is copied (not moved) to the new location D:\temp (the file name, %~nx0 http://ss64.com/nt/syntax-args.html, remains the same).

下一行从新位置运行批处理文件,但不使用call http://ss64.com/nt/call.html,需要返回到调用批处理脚本,但这不是我们想要的。这让前一个命令完成后执行下一个命令。虽然call未使用,下一个命令仍会执行,因为整行已被读取并解析cmd。但执行控制现在位于批处理文件的新实例,因此错误消息The batch file cannot be found.不再出现。

之前所提if查询立即退出批处理文件副本的执行,因此其其他代码不会运行两次。

如果您不想跳过复制的批处理文件的执行,请删除if命令行并修改copy命令行来获取这个:

rem // (some other code here...)
copy "%~f0" "D:\temp\%~nx0" > nul || exit /B
"D:\temp\%~nx0" & del "%~f0"

The > nul portion http://ss64.com/nt/syntax-redirection.html抑制显示消息(包括摘要1 file(s) copied.). The ||操作员 http://ss64.com/nt/syntax-redirection.html仅当复制失败时才执行下一个命令。因此,当执行原始批处理文件时,复制将按预期完成。当复制的批处理文件运行时,copy尝试将批处理文件复制到自身上,这会导致消息The file cannot be copied onto itself.(被抑制> nul)并且在触发的错误中exit /B命令(由于||) 离开批处理文件,因此不会尝试执行最后一行。


您也可以使用以下方法实现相同的行为move;所以相关代码如下所示:

if /I "%~dp0"=="D:\temp\" exit /B
rem // (some other code here...)
move "%~f0" "D:\temp\%~nx0" & "D:\temp\%~nx0"

或者,如果您希望移动的脚本不跳过其他代码:

rem // (some other code here...)
if /I not "%~dp0"=="D:\temp\" move "%~f0" "D:\temp\%~nx0" & "D:\temp\%~nx0"

The if查询是必要的,因为move,与copy,如果源和目标相等,则不会返回错误。


这是批处理文件的综合解决方案,它可以自行移动并随后对移动的文件进行控制。查看所有说明性注释,了解哪些批处理文件实例运行哪些代码:

@echo off

rem // Define constants here:
set "_TARGET=D:%~pnx0" & rem /* (this defines the movement destination;
                         rem     in your situation, the original batch file is
                         rem     `C:\temp\move_me.bat`, so the target file is
                         rem     `D:\temp\move_me.bat` (only drive changes)) */

rem // (code that runs for both batch file instances...)
echo Batch file: "%~f0"
echo   [executed by both files before the movement check]

rem // Check whether current batch file is the moved one:
if /I "%~f0"=="%_TARGET%" (

    rem // (code that runs for the moved batch file instance only...)
    echo Batch file: "%~f0"
    echo   [executed only by the moved file]

) else (

    rem // (code than runs for the original batch file instance only...)
    echo Batch file: "%~f0"
    echo   [executed only by the original file]

    rem // Actually move the batch file here, then give control to the moved one:
    > nul move "%~f0" "%_TARGET%"
    "%_TARGET%"

    rem /* (code that runs for the original batch file instance only;
    rem     this is run after the moved batch file has finished;
    rem     you must not use `goto` herein as the target label cannot be found,
    rem     because the original file does no longer exist at this point!) */
    echo Batch file: "%~f0"
    echo   [executed only by the original file, but after the moved one has finished]

)

rem // (code that runs for the moved batch file instance only...)
echo Batch file: "%~f0"
echo   [executed only by the moved file after the movement check]

exit /B

1) Note that parenthesised blocks of code (/) and continued lines ^ are considered as a single command line:


(
    echo This entire parenthesised block is
    echo considered as a single command line.
)
echo This continued line & ^
echo as well.  

2) Note that such argument references are immediately resolved as soon as a command line or block is read and parsed, hence before it is actually executed.

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

自移动批处理文件 的相关文章

  • VBscript 以提升的权限运行 bat 文件

    这是我的bat文件 REG DELETE HKLM Software Microsoft Windows CurrentVersion WindowsUpdate v SusClientId f REG DELETE HKLM Softwa
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • 如何在安装过程中运行“.bat”文件?

    在安装项目中 诸如 exe dll js vbs 之类的可执行文件是可以接受的 但无法运行 bat自定义操作中的文件 问题是如何运行 bat安装过程中的文件 好吧 经过大量搜索和反复试验 我解决了这个问题 我不确定这是否是最好的方法 但它确
  • 使用批处理解析 XML 文件以从某些特定节点获取值

    对于每个节点列表有Lists作为其父节点 我想获取 保存前三个节点的变量值 即entry output and token 我知道如何使用 vbscript 来做到这一点 但对我来说 批量解决方案更有趣 请问可以做吗
  • dia2dump:CoCreateInstance 失败 - HRESULT = 80040154

    我正在尝试使用 Visual Studio 2017 及其在 Windows 7 x64 上转储 PDB 的签名dia2dump https msdn microsoft com en us library b5ke49f5 aspx 我加
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚
  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 串行 I/O 与 Windows/Windows CE 重叠/不重叠

    抱歉 这不是一个大问题 但更多的是帮助那些在这些特定问题上遇到问题的人 我正在解决的问题需要使用串行 I O 但主要在 Windows CE 6 0 下运行 然而 最近有人问我该应用程序是否也可以在 Windows 下运行 所以我开始着手解
  • 导致崩溃转储的 Java 错误的解决方法

    我开发的一个程序偶尔会由于这个错误而导致 JVM 崩溃 http bugs java com bugdatabase view bug do bug id 8029516 http bugs java com bugdatabase vie
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • 什么是WINVER?

    我正在查看一些代码 他们有这一行 define WINVER 0x0501 in stdafx h文件 为什么需要定义WINVER 它如何影响您的代码 有人可以解释一下吗 WINVER 确定构建应用程序所需的最低平台 SDK 这反过来又会在
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or

随机推荐

  • DocumentDb - 嵌套文档和根级别的查询

    提醒我 编辑 删除 变更类型 问题 您不能对自己的帖子进行投票 0 你好 假设我有以下方式的文档 id 123 tags name something 我想查询包含 name searched 标签或 id 9000 的所有文档 我在操场上
  • ajax中的非法调用错误(Jquery 1.7.1)

    我正在尝试使用 jquery 发布 ajax 请求 var peName document getElementById peName value var peSubName document getElementById peSubNam
  • 通过 Visual Studio 进行 C++ 调试 - 向量大小变化的观察点

    我想用我的向量探索这些变化 因此我想在向量大小上设置一个点 因此 Visual Studio 将让我在每次大小更改后查看向量中的内容 我怎样才能做到这一点 在此链接中 http www codeproject com Articles 35
  • C# 如何在 windows xp/7 中禁用屏幕键盘声音

    我有一个在 Windows XP 7 上运行的 C 应用程序 我使用屏幕键盘 启用声音时会出现延迟 从而导致问题 我想禁用声音 如何通过我的 C 应用程序代码禁用声音 有任何想法吗 您可以从注册表禁用它 HKEY CURRENT USER
  • Apache hive 错误 此版本的 hadoop 不支持合并凭据

    我使用的是hadoop 1 2 1 hbase 0 94 14和hive 1 0 0 我的集群中有三个数据节点 还有三个区域服务器 我必须将一些数据从 hbase 导入到 hive 我已经成功配置配置单元 但是当我运行命令计数 no 时 h
  • 从 Xcode 5 导入 SVN 中的项目

    在 xcode 4 管理器中有一个 导入 按钮 在 xcode5 中如何导入 svn 存储库中的项目 thanks 这个问题有点令人困惑 所以如果这不完全是您所需要的 请告知 否则 请随意接受答案 令人困惑的是 您描述的 Xcode 4 工
  • 哪个版本的 Maven 与 Java 6 兼容?

    我必须在一个需要 java 6 才能运行的旧项目中工作 因为其中引用了已在未来版本中删除的已折旧的 sun 类 作为该过程的一部分 我将系统路径中的 jdk 从 8 更改为指向 java 6 jdk 这样做之后我得到 Exception i
  • EaselJS - 拖动缩放父级的子级

    注意 此问题现已解决 请参阅下面我的回答中的 修复 如果您认为合适 请随意注入任何进一步的知识 首先 我一直在研究和谷歌搜索 localToGlobal localToLocal 和 globalToLocal 但我对这些方法的理解还不足以
  • 无法将地图放入接收器上下文中

    我正在尝试查看在接收器上下文中抛出地图的方法 在这段代码中 class Sunk has titanic method sink say Sinking titanic Sunk new titanic for 1 3 1 3 map Su
  • 返回时未调用 ngOnInit

    我注意到ngOnInit 当我返回到已经实例化的页面时 方法不会被调用 我必须使用其他方法吗 我需要一个每次访问特定页面时都会调用的方法 EDIT已经测试过onPageWillEnter 但它在 Ionic 2 中没有被触发 Check 生
  • PHP中的短语分割算法

    不知道如何解释 让我们举个例子 说我想拆分句子 今天是个好日子 into today today is today is a today is a great today is a great day is is a is a great
  • 如何将图像调色板缩小为特定颜色?

    我正在使用 Python 程序来创建十字绣方案 并且需要将图像中的颜色减少为特定的牙线颜色像这样 http www dmc usa com Products Needlework Threads Embroidery Threads med
  • javascript方法链中的输入参数是如何填充的?

    我正在尝试真正了解 javascript 工作原理的细节 在方法链接期间 有时一个方法会返回到另一个具有命名输入参数的方法 例如 在 D3 中 模式如下所示 d3 select body selectAll p data dataset e
  • 使用 Backbone.js 的 JS 模板系统

    我正在寻找一些好的模板系统 可以与 Backbone js 等 MVC 框架一起使用 我知道这样一个系统 jQuery 模板 然而 由于某些原因 它已经停止 因此我正在寻找其他一些不错的选择 请建议从视图角度足够灵活的东西 例如 基于某些逻
  • Spring Boot属性在初始化时加载,并尊重所有属性并根据属性文件中的值控制@Aspect

    我们正在使用从外部文件加载属性 PropertySources 现在我想启用 禁用 Aspect基于属性 我尝试使用 ConditionalOnExpression这不起作用 我通过创建一个 bean 进行了同样的尝试propertypla
  • “您可能需要一个额外的加载器来处理这些加载器的结果。”

    我目前正在尝试为 ReactJs 构建一个状态管理库 但是一旦我将它实现到我的 React 项目中 使用create react app 它开始丢弃此错误 Failed to compile path to agile dist runti
  • QProcess 在未 waitForFinished() 时不发出信号

    下面的代码中省略了waitForFinished 使 QProcess 停止发出信号 这到底是怎么回事 这是 Qt 的错误吗 5 7 请注意 此代码与 QtConcurrent 并行运行 但这不应该改变任何事情 不是吗 Afaik 在其他线
  • [decl.constexpr].5 到底是什么意思?

    该标准关于常量表达式函数 decl constexpr 第 5 点规定 对于非模板 非默认 constexpr 函数或非模板 非默认 非继承 constexpr 构造函数 如果不存在参数值 则函数或构造函数的调用可以是核心常量的计算子表达式
  • 导出到 Excel 不适用于 SSL (https) 下的 IE

    我一直在尝试修复安全网站 https 上的某些内容 该网站是一个生成 CSV 文件的 导出到 Excel 按钮 它适用于 Firefox Chrome 等 但不适用于 Internet Explorer 我已经更改了标头 消除了无缓存 还编
  • 自移动批处理文件

    我正在寻找一种方法让批处理文件在执行后将其自身移动到已知位置 自动移动 似乎是最恰当的名字 但我确信它有一个技术术语 我想移动批处理文件after所有其他代码都已运行 move C temp move me bat D temp move