有没有办法单步执行.bat脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我到底要去哪里并添加我的修改.
我用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变量而不是原始文本?
批处理脚本非常新。我需要将命令的输出分配给变量。我开始了解 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=来忽略空格作为分隔符。我不知道为什么它仍然失败。任何帮助表示赞赏!
我正在尝试为自动 Unity 构建设置 Jenkins 服务器。
因此,我编写了两个(在我看来)基本相同的批处理脚本。
这两个脚本都由 Jenkins 通过一个Execute Windows batch command步骤作为构建步骤运行
命令: E:\unityImport.bat
然后Execute Windows batch command第二步使用
命令: E:\unityBuild.bat
它们都有相同的开头,因为我需要收集一些文件路径,特别是项目的统一版本。所以在这两个脚本中,我使用完全相同的解析和字符串拆分项目版本的方式。它们之间唯一不同的是,第一个启动 Unity 并将专用的unitypackage(保存在下一步中执行的方法)导入项目,而第二个再次启动 Unity 以执行实际构建(不幸的是它没有不能一次性工作...... Unity 似乎尝试在unitypackage导入之前执行该方法)。
然而,第二个脚本总是失败并出现语法错误
")" 不能在这里进行语法处理。
我试图实现的是
读出文件的内容 %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)字符串拆分以便只取包含版本号的最后一部分
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 版本,例如 …
我正在阅读一篇关于ss64关于命令提示符中的环境变量的文章。
本文后面有一个表,其中列出了命令提示符中常见的环境变量。其中列出的一些变量被称为易失性(只读)。文章中的一句话指出:-
动态环境变量是只读的,并且每次扩展变量时都会进行计算。当所有变量都用 SET 列出时,这些变量将不会出现在列表中。不要尝试直接设置动态变量。
后两句话我明白了。但我无法理解第一个。
疑问:-
%userprofile%是非易失性变量,解析为%SystemDrive%\Users\{username},%homepath%是易失性变量,解析为Users\{Username}。这两个命令非常相似(除了systemdrive)。那为什么一个是易失性的,另一个是非易失性的呢?
变量动态的标准是什么?是什么使%appdata%(只是一个例子)成为非易失性变量?
每次扩展变量时都会计算动态变量,这对于诸如此类的变量是有意义的,%CD% %DATE% %TIME% %RANDOM%因为如果它们是非易失性的,它们就会失去其功能。但效果如何呢%homepath%?
一些非易失性变量中含有某种动态成分。前任。%userprofile%有%SystemDrive%并且{username}在它的路径中。那么这些变量怎么不是动态的呢?
大家早。
所以我花了几个小时试图拼凑 - 对其他帖子的各种回复 - 到我自己的代码中,以查看我是否可以获得可用的东西。不去。我已经完全迷失在酱汁中了,所以我现在必须向你寻求帮助。
背景:操作系统: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”。一切都很好。 …
我正在尝试在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)
执行批处理文件时出现此错误消息的原因是什么?
我是批处理文件编写的新手,并且正在编写一个脚本,该脚本会随机打开三个网页之一并在延迟后循环。我在运行它时经常遇到语法错误,但是我无法查明它在哪里。
: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)
帮助将不胜感激,并在此先感谢!
我是批处理新手,因此我无法弄清楚,为什么会出现语法错误??
这是我的代码:
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)
这只是一个“为了好玩”的项目,但我想知道为什么我会收到这个烦人的错误!