我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.
但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.
以下是我无法解决的示例问题:
foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
my_script.exe "a ""b"" c"?输出是 *a "b*cmy_script.exe """a b c"""?输出它*"a*b*c"echo命令如何工作?在那个命令中扩展了什么?for [...] %%I在文件脚本中使用,但for [...] %I在交互式会话中?%PROCESSOR_ARCHITECTURE%字面回声?我发现echo.exe %""PROCESSOR_ARCHITECTURE%有效,有没有更好的解决方案?%配对?例:
set b=a,echo %a %b% c%?%a a c%set a =b,echo %a %b% c%?bb c%如何使用Windows批处理文件从文本文件中读取第一行?由于文件很大,我只想处理第一行.
我正在玩cmd.exe,但在它的帮助下我没有找到任何信息,如何定义数组.
我发现,如何定义简单变量:
set a=10
echo %a%
Run Code Online (Sandbox Code Playgroud)
但是,我想创建数组,链表等...
那么,它能否在cmd.exe中使用(我的意思是:cmd.exe中是否存在任何数组关键字?)
我想实现一些算法:
等等...
所以,我也想知道,Cmd.exe是否有引用或实例,结构等?
导致其帮助不完整:/?
可以通过图灵机定义将Cmd.exe定义为完整吗?(图灵完成)
我做了这个代码
dir /B /S %RepToRead% > %FileName%
for /F "tokens=*" %%a in ('type %FileName%') do (
set z=%%a
echo %z%
echo %%a
)
Run Code Online (Sandbox Code Playgroud)
echo %%a工作正常,但echo %z%返回"回声禁用".
我需要设置%z%,因为我想将变量拆分为 %z:~7%
有任何想法吗?
在遇到这个问题两次后,我想我会在这里发布,看看是否有人知道如何绕过它.
我似乎无法突破嵌套循环使用goto,因为它看起来就像它突破内循环,然后括号不匹配,因为它从未到达内部关闭循环.
我把它缩小到一个非常简单的例子
for %%a in (1,2,3) do (
for %%b in (4,5,6) do (
echo Breaking
goto :BREAK
)
:BREAK
)
Run Code Online (Sandbox Code Playgroud)
这导致错误
) was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
我想可能添加额外的括号可能会解决问题,但除非我知道我要打破,否则它将无法解决,如果这是一个有条件的突破,那就是同样的问题.
是否有任何简单的替代方法可以将内循环分解回外部,即使是使用if's和else's 的条件中断?
我知道这样做的方法有点像作弊但下面的代码创建一个临时文件,然后删除它.我不希望这种情况发生.这样做有适当或更好的方法吗?
command 2>> "temp"
set /p OUTPUT=<"temp"
del "temp"
echo %OUTPUT%
Run Code Online (Sandbox Code Playgroud)
我知道有一个使用for循环的解决方案但是对于返回多行结果的命令不起作用.我想将所有这些存储到我的变量中.(我试过这个代码顺便说一句)
以下将打印 Windows 批处理文件中的当前数据和时间:
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这个。
但是,如果放置在循环中,初始数据和时间将不断打印,并且不会更新以反映新时间。
如何修改它以反映当前时间并在循环内工作?
谢谢
碰巧的是,有一个BAT文件在Windows Server 2008上运行某个命令行工具,并将输出重定向到一个不断增长的日志,我想在每次日志增长到一定大小时都将其旋转。毫无疑问,将BAT文件更改为CMD会很耗时间和精力。因此,我不得不编辑该BAT文件。
下面的所有内容都在Windows 7和2008上进行了测试。
尝试了以下内容:
for %%I in (Log.txt) do @echo %%~zI >> size.tmp
set /p logSIZE=<size.tmp
del size.tmp
if %logSIZE% GTR 100 (
echo OK
)
Run Code Online (Sandbox Code Playgroud)
当时的测试Log.txt是157个字节,因此它得到了回应OK。然后我通过将100增加到200进行了否定测试,但没有回声OK。到目前为止,一切都很好。
接下来,我尝试将日期和时间戳连接到文件名中:
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dateStamp=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set timeStamp=%%a%%b)
echo Log_%dateStamp%_%timeStamp%.txt
Run Code Online (Sandbox Code Playgroud)
这也像一种魅力。下一步是将两个脚本合并为一个:
for %%I in (Log.txt) do @echo %%~zI >> size.tmp
set /p logSIZE=<size.tmp
del size.tmp
if %logSIZE% GTR 100 ( …Run Code Online (Sandbox Code Playgroud) 我正在阅读一篇关于ss64关于命令提示符中的环境变量的文章。
本文后面有一个表,其中列出了命令提示符中常见的环境变量。其中列出的一些变量被称为易失性(只读)。文章中的一句话指出:-
动态环境变量是只读的,并且每次扩展变量时都会进行计算。当所有变量都用 SET 列出时,这些变量将不会出现在列表中。不要尝试直接设置动态变量。
后两句话我明白了。但我无法理解第一个。
疑问:-
%userprofile%是非易失性变量,解析为%SystemDrive%\Users\{username},%homepath%是易失性变量,解析为Users\{Username}。这两个命令非常相似(除了systemdrive)。那为什么一个是易失性的,另一个是非易失性的呢?
变量动态的标准是什么?是什么使%appdata%(只是一个例子)成为非易失性变量?
每次扩展变量时都会计算动态变量,这对于诸如此类的变量是有意义的,%CD% %DATE% %TIME% %RANDOM%因为如果它们是非易失性的,它们就会失去其功能。但效果如何呢%homepath%?
一些非易失性变量中含有某种动态成分。前任。%userprofile%有%SystemDrive%并且{username}在它的路径中。那么这些变量怎么不是动态的呢?
我正在尝试在 Unity 中调试我的托管 DLL。它曾经在 Unity 2018.x 上运行良好
现在我有 Unity 2019.3 并且我无法再调试(我的 DLL 工作正常,我只是无法调试它们)。
我的 DLL 及其 pdb 文件位于 Assets 文件夹中。这曾经足以调试它们。
阅读此文档:https : //docs.unity3d.com/Manual/UsingDLL.html,我正在尝试创建 mdb 文件。
第一个问题,文档说我必须将 .pdb 文件作为参数传递,而谷歌上的大多数链接都说要传递 .dll
此链接还指出我应该更改 .bat 文件的工作目录才能使用 pdb2mdb.exe:https ://answers.unity.com/questions/294195/pdb2mdb-usage-error-from-command-line .html
这是我的代码:
set PathToLib="Libraries\"
if exist Libraries\LibBDD.dll (
echo Before switching directory for my lib %CD%
cd %PathToLib%
echo new directory %CD%
@pause
"C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe" LibBDD.dll
@pause
cd ..\..\..\..\..\
echo LibBDD done, new directory %CD%
)
Run Code Online (Sandbox Code Playgroud)
首先,我不确定我的 CD 命令是否有效,因为路径保持不变。但我没有任何例外。
有了这个代码,我得到:
致命错误:Microsoft.Cci.Pdb.PdbDebugException:未知的自定义元数据项种类:6 à Microsoft.Cci.Pdb.PdbFunction.ReadCustomMetadata(BitAccess …