从路径中删除当前工作目录

2024-01-10

我在 Windows 中工作,想知道是否有办法从路径中删除当前工作目录?我知道这是 PowerShell 中的默认行为,但我需要它批量工作或在 Windows 命令行中工作。

在 UNIX 中,我只需确保我的$PATH变量不包含.。有什么办法可以批量完成这个任务吗?这是当前的行为:

H:\tmp>dir
 Volume in drive H has no label.
 Volume Serial Number is E29C-7B61

 Directory of H:\tmp

04/27/2018  10:39 AM    <DIR>          .
04/27/2018  10:39 AM    <DIR>          ..
04/27/2018  10:40 AM                37 dwk.bat
               1 File(s)             37 bytes
               2 Dir(s)  987,995,770,880 bytes free

H:\tmp>dwk.bat
dwk.bat has been run.

H:\tmp>

这是期望的行为:

H:\tmp>dwk.bat
'dwk.bat' is not recognized as an internal or external command,
operable program or batch file.

H:\tmp>.\dwk.bat
dwk.bat has been run.

H:\tmp>

Thanks.


我建议首先阅读 Stack Overflow 问题的答案:

  • “START”在哪里搜索可执行文件? https://stackoverflow.com/questions/27382626/
  • “...”不被识别为内部或外部命令、可运行程序或批处理文件的原因是什么? https://stackoverflow.com/questions/41454769/

非常感谢 eryksun https://stackoverflow.com/users/205580/eryksun因为如果没有这个答案就不存在他的评论 https://stackoverflow.com/questions/41454769/what-is-the-reason-for-is-not-recognized-as-an-internal-or-external-comman#comment78348685_41461002关于上面引用的答案。

接下来我建议阅读 Microsoft Developer Network (MSDN) 文章:

  • 命名文件、路径和命名空间 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx
  • NeedCurrentDirectoryForExePath 函数 https://msdn.microsoft.com/en-us/library/windows/desktop/ms684269.aspx

可以回答这个问题:是的,桌面应用程序和批处理文件可以在

  • Windows Vista 和所有更高版本的 Windows 客户端版本以及
  • Windows Server 2003 和所有更高版本的 Windows Server。

带有名称的环境变量NoDefaultCurrentDirectoryInExePath必须定义为任意值,以防止在未显式使用的情况下执行存储在当前目录中的脚本(.bat、.cmd、.vbs...)或应用程序(.com、.exe).\根据 Unix/Linux 上的要求。

环境变量NoDefaultCurrentDirectoryInExePath可以定义为system变量以关闭在当前目录中搜索该计算机上所有帐户的脚本或应用程序。但这肯定不是一个好主意,因为它肯定会导致许多应用程序(包括安装程序和卸载程序)不再正常工作。

环境变量NoDefaultCurrentDirectoryInExePath可以定义为user变量以关闭在当前目录中搜索使用此帐户的进程的脚本或应用程序。但这肯定也不是一个好主意。

但设置环境变量是有意义的NoDefaultCurrentDirectoryInExePath as local在某些用例中,变量可以关闭在当前目录中搜索脚本或应用程序而无需显式使用.\在具有内核功能的 Windows 版本上NeedCurrentDirectoryForExePath which cmd.exe在搜索不包含反斜杠的脚本文件或应用程序之前调用\(或正斜杠/) 在文件名字符串中。

Example:

@echo off
pushd "%TEMP%"
set "NoDefaultCurrentDirectoryInExePath=0"

echo @echo %%0 executed successfully.>Test1.bat

echo Calling Test1.bat ...
call Test1.bat

echo Calling .\Test1.bat ...
call .\Test1.bat

echo Starting Test1.bat ...
start /wait Test1.bat ^& timeout 5

set "NoDefaultCurrentDirectoryInExePath="

echo Calling again Test1.bat ...
call Test1.bat

del Test1.bat
popd
pause

从命令提示符窗口中执行的此批处理文件会产生当前控制台窗口的输出:

Calling Test1.bat ...
'Test1.bat' is not recognized as an internal or external command,
operable program or batch file.
Calling .\Test1.bat ...
.\Test1.bat executed successfully.
Starting Test1.bat ...
Calling again Test1.bat ...
Test1.bat executed successfully.
Press any key to continue . . . 

在执行该批处理文件期间,会打开第二个控制台窗口并显示输出:

"%TEMP%\Test1.bat" executed successfully.

第二个控制台窗口将在 5 秒后自动关闭。

环境变量NoDefaultCurrentDirectoryInExePath是用值定义的0将临时文件的目录设置为当前目录并将当前目录路径推送到堆栈后。变量值并不重要,因为评估的只是环境变量的存在而不是它的值。

接下来是另一个具有名称的批处理文件Test1.bat在临时文件目录中创建,该临时文件通常对当前用户没有写保护,因为这会导致很多麻烦。

第一种调用方法Test1.bat由于环境变量而没有任何路径失败NoDefaultCurrentDirectoryInExePath是在本地环境中定义的。

第二次调用Test1.bat带相对路径.\尽管存在环境变量,但仍成功。

命令START忽略NoDefaultCurrentDirectoryInExePath如该批处理文件所证明。

然后是环境变量NoDefaultCurrentDirectoryInExePath被删除以恢复原始 Windows 行为。

第二种调用方式Test1.bat没有任何路径现在就成功了。

最后创建的Test1.bat被删除,初始当前目录恢复为当前目录。

当然不可能阻止命令的执行DIR这不是脚本文件或可执行文件。这是一个内部命令cmd.exe– Windows 命令处理器 – 分别powershell.exe– Windows PowerShell。

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

从路径中删除当前工作目录 的相关文章

  • 适用于 Python 的 GitLab CI 共享 Windows 运行器

    我在 GitLab 中有一个 python 项目仓库 我看到 GitLab 共享了可用的测试版 Windows 运行程序 请参阅this https about gitlab com blog 2020 01 21 windows shar
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • 如何在 Windows 中创建上下文菜单子菜单?

    我一直在编写实用程序并通过 Shell 键 上的 Regedit 将它们映射到上下文菜单 但我不知道如何像一些更流行的实用程序那样创建子菜单 例如 如果我有三个脚本将文件移动和重命名到三个不同的文件夹 那么现在我有三个不同的上下文菜单条目
  • 为什么某些安装程序需要在运行程序之前重新启动计算机?

    我对部署桌面应用程序相当陌生 所以这是我第一次为我的软件构建安装程序 目前 我安装软件后第一次运行它时 它崩溃了 之后 它运行良好 我仍在调试此问题 但我注意到在安装后和运行软件之前立即重新启动似乎可以修复此崩溃 某些安装程序要求您在运行软
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Windows 10:任务栏中的图标大小错误

    从 Windows 10 开始 任务栏中的图标大小似乎为 24x24px 如果 Windows 选择图标文件中的 24px 版本进行显示 那么这不会有问题 但它选择了 32px 版本并将其缩小 这会导致丑陋的伪像 尤其是当你的图标中有直线时
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何在 Windows 上使用命令行获取 svn 修订信息

    我正在尝试使用此命令行获取头部的修订信息 svn info https myserver branches Code Improvements rHEAD find Revision 然而 这返回修订版 1234 由于我使用 svn inf
  • msvcrt.getch() 每次都会检测到空格

    我正在编写一个简单的Python代码 它应该检测我的击键 但由于某种原因 在每次击键后检测空格 代码 import msvcrt print press escape to quit text while 1 char msvcrt get
  • 为进程设置环境变量

    环境变量的概念是什么 在 C 程序中 我需要调用可执行文件 该可执行文件将调用驻留在同一文件夹中的一些其他可执行文件 可执行文件依赖于两个环境变量 PATH 和 RAYPATH 的正确设置 我尝试了以下两件事 我创建了一个进程并在 Star
  • 如何确保密钥是在 TPM 内部创建的?

    我需要 在客户端计算机上运行 exe 这将在 TPM 中创建密钥对 然后我将使用 TPM 生成的密钥对的公钥部分创建 CSR 我关心的是如何确保密钥是在 TPM 内部创建的 而不是由欺骗的 TPM 创建的 这将使私钥能够被迁移和复制 我听说
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • forrt1:严重(170):程序异常 - 堆栈溢出

    并提前感谢您的帮助 我已经编译了一个程序 不是我编写的 它在 Mac 上运行得很好 但是当我尝试在 Windows 上执行该程序时 在程序开始执行后不久 我收到以下错误消息 forrt1 严重 170 程序异常 堆栈溢出 我不是 ifort
  • 如何通过文件关联执行已启动应用程序的事件?

    在尝试了一个新的 Windows 窗体项目后 我发现当您将文件类型与 Windows 中的可执行文件关联时 您可以使用以下命令找到启动应用程序的文件的文件路径args 0 from static void Main string args
  • 在 .NET 中获取远程计算机上环境变量的实际值

    我正在尝试获取实际值 of 环境变量 这是我到目前为止所拥有的 string query string Format Select VariableValue From Win32 Environment Where Name 0 vari
  • 加载配置文件时发生错误:访问路径 c:\Program Files (x86)\... 被拒绝

    我有一个在 Windows 7 上使用 Visual Studio 2010 中的安装程序部署的应用程序 该程序在 Windows 7 和 XP 上部署并运行良好 但当我在 Windows 8 系统上部署它时 出现有关访问配置文件的错误 该
  • 谷歌基准迭代的意义是什么?

    我正在使用 Google Benchmark 来测量某些代码的执行时间 例如 我编写了以下代码来测量其执行时间性能 include
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际
  • 将环境变量传递给子shell CMD

    我的系统有问题gitlab ci yml在 Windows 上 我发射phpunit与环境变量 所以 我有一个像这样的变量 PHPUNIT SOURCE PATH cgi bin php exe PHPUNIT PATH 之前声明了一些变量

随机推荐