相关疑难解决方法(0)

如何调试.BAT脚本?

有没有办法单步执行.bat脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我到底要去哪里并添加我的修改.

windows debugging cmd batch-file

92
推荐指数
5
解决办法
15万
查看次数

在cmd中使用'set var = text'命令后,为什么没有带'echo%var%'的字符串输出?

我用set命令在cmd中设置了一个变量,然后尝试了echo.

这是一个例子:

C:\Users\Logan>set var = text

C:\Users\Logan>set var
var = text

C:\Users\Logan>echo %var%
%var%

C:\Users\Logan>
Run Code Online (Sandbox Code Playgroud)

有没有办法强制cmd echo变量而不是原始文本?

cmd batch-file

7
推荐指数
2
解决办法
7302
查看次数

批处理脚本 - 在命令和 usebackq 中使用带有空格的 FOR /F

批处理脚本非常新。我需要将命令的输出分配给变量。我开始了解 FOR /F 命令。我的命令有空格和双引号。所以我尝试使用 usebackq 选项。但它因空间错误而失败。

for /F "usebackq delims=" %%G IN (`"C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"`) DO (
SET var=%%G
)

ECHO %var%

pause
Run Code Online (Sandbox Code Playgroud)

失败 :

'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

根据 StackOverflow 上的其他问题,我做的一切都是正确的 - usebackq来使用反勾号,demlims=来忽略空格作为分隔符。我不知道为什么它仍然失败。任何帮助表示赞赏!

windows batch-file

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

两个几乎相同的批处理脚本之一中的语法错误:“)”无法在此处进行语法处理

我正在尝试为自动 Unity 构建设置 Jenkins 服务器。

因此,我编写了两个(在我看来)基本相同的批处理脚本。

这两个脚本都由 Jenkins 通过一个Execute Windows batch command步骤作为构建步骤运行

命令: E:\unityImport.bat

然后Execute Windows batch command第二步使用

命令: E:\unityBuild.bat

它们都有相同的开头,因为我需要收集一些文件路径,特别是项目的统一版本。所以在这两个脚本中,我使用完全相同的解析和字符串拆分项目版本的方式。它们之间唯一不同的是,第一个启动 Unity 并将专用的unitypackage(保存在下一步中执行的方法)导入项目,而第二个再次启动 Unity 以执行实际构建(不幸的是它没有不能一次性工作...... Unity 似乎尝试在unitypackage导入之前执行该方法)。

然而,第二个脚本总是失败并出现语法错误

")" 不能在这里进行语法处理。


我试图实现的是

  1. 读出文件的内容 %WORKSPACE%\ProjectSettings\ProjectVersion.txt

    SET /p TEST=<%WORKSPACE%\ProjectSettings\ProjectVersion.txt
    
    Run Code Online (Sandbox Code Playgroud)

    的内容%TEST%通常看起来像例如

    m_EditorVersion: 2019.3.4f1
    
    Run Code Online (Sandbox Code Playgroud)

    ECHO. ProjectVersion.txt = %TEST%看起来像

    ProjectVersion.txt = m_EditorVersion: 2019.3.4f1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 字符串拆分以便只取包含版本号的最后一部分

    for %%x in (%TEST::= %) do (
        SET "VALUE=%%x"
        SET "UNITY_VERSION=!VALUE:~0,-2!" 
    )
    
    Run Code Online (Sandbox Code Playgroud)

    所以%UNITY_VERSION%通常包含例如2019.3.4. 我不会拆分更多,因为也有两位数的 Unity 版本,例如 …

batch-file unity-game-engine jenkins

5
推荐指数
1
解决办法
481
查看次数

CMD中动态环境变量与普通环境变量的区别

我正在阅读一篇关于ss64关于命令提示符中的环境变量的文章。

本文后面有一个,其中列出了命令提示符中常见的环境变量。其中列出的一些变量被称为易失性(只读)。文章中的一句话指出:-

动态环境变量是只读的,并且每次扩展变量时都会进行计算。当所有变量都用 SET 列出时,这些变量将不会出现在列表中。不要尝试直接设置动态变量。

后两句话我明白了。但我无法理解第一个。

疑问:-

  • %userprofile%非易失性变量,解析为%SystemDrive%\Users\{username}%homepath%易失性变量,解析为Users\{Username}。这两个命令非常相似(除了systemdrive)。那为什么一个是易失性的,另一个是非易失性的呢?

  • 变量动态的标准是什么?是什么使%appdata%(只是一个例子)成为非易失性变量?

  • 每次扩展变量时都会计算动态变量,这对于诸如此类的变量是有意义的,%CD% %DATE% %TIME% %RANDOM%因为如果它们是非易失性的,它们就会失去其功能。但效果如何呢%homepath%

  • 一些非易失性变量中含有某种动态成分。前任。%userprofile%%SystemDrive%并且{username}在它的路径中。那么这些变量怎么不是动态的呢?

cmd environment-variables command-prompt

5
推荐指数
1
解决办法
4431
查看次数

测试 IF 文件存在,ELSE xcopy 这两个文件

大家早。

所以我花了几个小时试图拼凑 - 对其他帖子的各种回复 - 到我自己的代码中,以查看我是否可以获得可用的东西。不去。我已经完全迷失在酱汁中了,所以我现在必须向你寻求帮助。

背景:操作系统:Windows 10 我每天晚上使用程序 text2folders.exe 在辅助驱动器上创建 20-30 个新文件夹。首先,我有一个基本文件“aGallery-dl.bat”,我使用 xcopy 批处理文件填充每个文件夹。其次,我不时使用相同的 xcopy 更新源文件“aGallery-dl.bat”,这会覆盖旧的目标文件,用最新的“aGallery-dl.bat”填充所有文件夹(无论他们是否需要) )。一切都很好。

@echo off
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy /y /d ".\aGallery-dl.bat" "%%a\"
Run Code Online (Sandbox Code Playgroud)

我最近决定向每个文件夹添加两个新文件,并扩展了我的 xcopy 以包含这些文件。一切都很好。

@echo off
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy /y /d ".\aGallery-dl.bat" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder.jpg" "%%a\"
for /D %%a in ("U:\11Web\gallery-dl\deviantart\*.*") do xcopy ".\Folder2.jpg" "%%a\"
Run Code Online (Sandbox Code Playgroud)

Folder.jpg 一个大红X

Folder2.jpg 一个大黄!标记

当我选择在给定文件夹中运行“aGallery-dl.bat”(同样是 100 个文件夹之一)时,它首先删除 Folder.jpg,然后将 Folder2.jpg 重命名为 Folder.jpg。这具有将红色 X 替换为黄色的效果!在文件资源管理器父文件夹中查看文件夹时。其次,它调用“gallery-dl.exe”。我使用从红色变为黄色来让我知道我至少运行过一次“aGallery-dl.bat”。一切都很好。 …

testing if-statement xcopy batch-file

5
推荐指数
1
解决办法
527
查看次数

如何在Windows批处理文件中正确转义括号?

我正在尝试在Windows批处理文件中使用这些命令行:

SET mypath="%programfiles(x86)%\Directory\SubDirectory"
SET app2="com.estrongs.android.pop_4.1.6.8.9.3-604_minAPI14(armeabi^,armeabi-v7a^,x86)(nodpi)_apkmirror.com.apk"

If Not Exist "%mypath%\includes\apk\%app2%" (
  Rem DO SOMETHING
) ELSE (
  Rem DO SOMETHING ELSE
)
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

(nodpi)_apkmirror.com.apk was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

执行批处理文件时出现此错误消息的原因是什么?

windows batch-file

3
推荐指数
1
解决办法
1300
查看次数

批处理文件中是否存在ELSE语法错误?

我是批处理文件编写的新手,并且正在编写一个脚本,该脚本会随机打开三个网页之一并在延迟后循环。我在运行它时经常遇到语法错误,但是我无法查明它在哪里。

:main
@echo on
set location=""
set /A num=%random% %% 10 
if /A"%num%"=="0"
(
    set location="yahoo.com"
) 
else if /A"%num%"=="1"
(
    set location="msn.com"
)
else
(
    set location="google.com"
)

start "Chrome" chrome --new-window %location%
timeout /t 30 /nobreak >NUL
goto main
Run Code Online (Sandbox Code Playgroud)

帮助将不胜感激,并在此先感谢!

batch-file

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

命令的语法不正确?

我是批处理新手,因此我无法弄清楚,为什么会出现语法错误??

这是我的代码:

set /p hostname1=<a.txt


echo %hostname1%

PAUSE

IF %hostname1% == 0 (
    SET %hostname02% = 1
    echo %hostname02% >> a.txt
    PAUSE

) 

IF %hostname1% == 1 (

    SET %hostname03% = 2
    echo %hostname03% >> a.txt
    PAUSE
    exit
) 

IF %hostname1% == 2 (
    echo MSGBOX "Message" > %temp%\TEMPmessage.vbs
    call %temp%\TEMPmessage.vbs
    del %temp%\TEMPmessage.vbs /f /q
) 
Run Code Online (Sandbox Code Playgroud)

这只是一个“为了好玩”的项目,但我想知道为什么我会收到这个烦人的错误!

batch-file

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