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

Tripp动力学

我正在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>

谢谢。

莫菲

我建议先阅读有关堆栈溢出问题的答案:

非常感谢 eryksun,因为如果没有对上述参考答案的评论就不会有这个答案。

接下来,我建议阅读Microsoft开发人员网络(MSDN)文章:

可以通过以下方式回答问题:是的,可以将桌面应用程序和批处理文件放在

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

用名称的环境变量NoDefaultCurrentDirectoryInExePath必须用任何值,以防止一个脚本的执行(蝙蝠,.CMD,.VBS,...)或者存储在当前目录中的应用程序(.COM,.EXE),而不显式地使用被定义.\为需要在Unix / Linux上。

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

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

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

例:

@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.exeWindows命令处理器的内部命令,分别是powershell.exeWindows PowerShell的内部命令

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章