相关疑难解决方法(0)

转义Windows批处理文件中的&符号

我意识到你可以使用hat字符在批处理文件中转义&符号

例如

echo a ^& b
a & b
Run Code Online (Sandbox Code Playgroud)

但我正在使用该命令

for /f "tokens=*" %%A IN ('DIR /B /A-D /S .acl') DO ProcessACL.cmd "%%A"
Run Code Online (Sandbox Code Playgroud)

它查找当前目录中名为".acl"的所有文件,或当前目录的子目录.

问题是,我找到包含'&'字符的路径名(不,它们不能重命名),我需要一种方法来自动转义&符号并使用转义路径调用第二个批处理文件参数.

rem ProcessACL.cmd
echo %1
Run Code Online (Sandbox Code Playgroud)

windows escaping batch-file

6
推荐指数
1
解决办法
8949
查看次数

如何在Windows上只在批处理文件中设置一次PATH环境变量?

我有批处理文件,用于设置用户路径,并作为Visual Studio IDE构建步骤的一部分运行.

@ECHO OFF
@ECHO %PATH%
set COMSPEC = "%VCINSTALLDIR%\vcvarsall.bat" amd64
setx PATH "..\..\lib\libsndfile;..\..\lib\simulink" 
@ECHO %PATH%
Run Code Online (Sandbox Code Playgroud)

当我构建项目,关闭VS,并重新打开它,并重建时,我将附加路径视为PATH变量的一部分.但是,我看到在Windows环境中设置环境变量PATH变量是在用户环境变量下创建的

..\..\lib\libsndfile;..\..\lib\simulink
Run Code Online (Sandbox Code Playgroud)

问题1:

为什么此路径也作为附加路径显示为系统环境变量的一部分?

echo %PATH%通过Visual Studio控制台执行时(当我第二次运行项目时)打印系统变量路径和我创建的新路径附加到它.

问题2:

我想修改我的批处理文件,以便它只PATH在首次运行Visual Studio构建期间在用户设置中设置一次环境变量.如果用户变量PATH在后续运行中已存在,则不应再次执行set命令以避免在系统变量中反复添加新路径.

任何想法如何实现这一目标?

batch-file

2
推荐指数
1
解决办法
7026
查看次数

一个爆炸字符在Windows bat文件中意味着什么?

我正在尝试纠正一个使用爆炸字符的蝙蝠文件,我希望在某种形式的引用:类似的东西

set some_var=!some_var:"=\"!
Run Code Online (Sandbox Code Playgroud)

然后是

some command !some_var!
Run Code Online (Sandbox Code Playgroud)

看起来第一个是提示输入时禁用了echo,比如提示输入密码,第二个引用变量.通常,bat文件使用百分比字符,例如

%some_var%
Run Code Online (Sandbox Code Playgroud)

任何人都知道爆炸角色在蝙蝠文件中究竟做了什么?试图调试这个东西,不喜欢猜测.

windows batch-file

2
推荐指数
1
解决办法
377
查看次数

检查 Windows 10 的批处理文件中是否存在包含空格的文件

我正在尝试根据操作系统运行安装在不同位置的程序。我正在通过批处理文件运行该程序。我看到很多帖子都说要加上双引号,但它不起作用。

if exist "C:\Program Files\Manufacturer\" 
(
    copy F:\Manufacturer\Manufacturer.exe "C:\Program Files\Manufacturer\Manufacturer.exe"
    c:
    cd "C:\Program Files\Manufacturer\"
) 
else 
(
    copy F:\Manufacturer\Manufacturer.exe "C:\Program Files (x86)\Manufacturer\Manufacturer.exe"
    c: 
    cd "C:\Program Files (x86)\Manufacturer\"
)
start Manufacturer.exe
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?

batch-file windows-10

2
推荐指数
1
解决办法
7639
查看次数

通过拖放操作调用的vbscript中的当前工作目录

当我试图获得我的批处理脚本的提升权限时,我发现了两个相关的SO问题

......这导致了部分解决的问题.出于某种原因,我遇到了在VBS脚本中包含空格的文件路径参数的命令行传递问题,所以我试图将解决方案分成3部分并集中在内部(VBS)步骤,然后通过调用a添加最后一步尽管与VBS脚本位于同一文件夹中,但无法找到该VBS中的批处理.我发现,拖放不是"那么简单" 它使用时的不同.vbs,而不是.bat.exe用作放置目标.

这是我的实际问题:

如果我拖动文件并将其拖放到可执行文件(exe)或批处理文件(bat,cmd)上,则当前工作目录由拖动项目的来源确定.其目录设置为处理它的程序或脚本的工作目录.

如果我将文件放到VBS脚本上,则会有所不同.在Windows 8.1 x64上,C:\Windows\System32即使参数与VBS位于同一文件夹中,我也会观察到它.

我可以简单地使用这样的批处理文件(如拖放中继)

my.vbs %*
Run Code Online (Sandbox Code Playgroud)

获得"正常" .bat行为(drop source指示CWD),但我也想了解它.

这是一个错误还是一个功能?它是否与所有Windows版本一致?


编辑:为显示我如何到达的问题添加背景(在顶部)(+次要更正)

windows vbscript drag-and-drop batch-file working-directory

2
推荐指数
1
解决办法
1093
查看次数