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

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(使用前将#替换为@)

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

  • 在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)

    我现在真的很沮丧 我有一个现有的 hg 存储库 其中有几个月的编码历史 我想将其放入私有 Github 存储库中 以便我可以从那里对其进行处理 不幸的是我使用的是 Windows 我似乎找不到any转换我实际上可以正常工作的存储库的方法 实
  • 如何通过 DOS 批处理命令发送电子邮件?

    我在 DOS 中有一个批处理文件 可以进行一些检查 完成后我需要发送一封电子邮件 我在 interwebz 上找到了一些解决方案 但大多数都是第三方的 或者只是在 Outlook 中打开新邮件 我需要命令来发送完整的电子邮件 而无需任何人工
  • 排除批复制脚本中的文件夹

    我正在使用 U 盘上的批处理文件来备份我的照片 我使用以下命令 for r C x in jpg png gif do copy y x 我想排除邮件文件夹 WINDOWS 和 PROGRAM FILES 中的文件 有谁知道如何使用批处理文
  • 批处理文件 FOR /f 标记

    任何人都可以逐行准确解释以下代码是如何工作的 我真的迷路了 我一直在尝试学习如何使用 FOR 命令 但我不明白这一点 echo off for f tokens delims f in myfile do set line f call p
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 由于图形处理单元配置,不支持 Windows Phone 模拟器(Mac 上的 Windows 7)

    启动 Windows Phone 模拟器时出现错误 不支持 Windows Phone 模拟器 因为您的计算机没有所需的图形处理单元配置 如果没有图形处理单元 XNA 框架页面将无法运行 您想继续启动模拟器吗 当我尝试访问网页 任何网页 时
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 以不敏感的方式在 bash 中查找路径

    假设一条路径像 home albfan Projects InSaNEWEBproJECT 尽管事实上不使用这样的名称 有没有办法以不敏感的方式检查路径 我遇到了这个解决方案 但如果可能的话 我想找到一个内置或 gnu 程序 functio
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 在 Mac OS X 10.6.8 中手动编译 Ruby 时,GEM 在哪里?

    我在 Snow Leopard 上手动构建了 Ruby 1 9 2 现在我找不到我的旧 GEM 文件了 我猜他们现在正走在不同的道路上 所以我有三个问题 什么是 旧 宝石路径 在哪里gem install sinatra把西纳特拉宝石 当我
  • NodeJS Express Windows 最大连接数设置

    在哪里设置nodejs的最大连接数 用于使用express get 在 Windows 10 中 与linux中的最大文件 描述符 设置有关吗 有该设置的 Windows 版本吗 最好是在nodejs中进行设置 以便在迁移到unix时兼容
  • Windows C++ 中的键盘钩子还是什么?

    我希望构建自己的应用程序 它可以将键盘命令 消息 发送到 Windows 操作系统 例如 当我按下组合键 ctrl shift n 时 我希望启动 notepad exe 我怎样才能做到这一点 您对所使用的概念有什么建议吗 我读过 何时使用
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H

随机推荐