相关疑难解决方法(0)

Windows命令解释器(CMD.EXE)如何解析脚本?

我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.

但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.

以下是我无法解决的示例问题:

  • 如何管理报价系统?我制作了一个TinyPerl脚本
    (foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
    • my_script.exe "a ""b"" c"?输出是 *a "b*c
    • my_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 parsing cmd batch-file variable-expansion

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

Windows批处理命令从文本文件中读取第一行

如何使用Windows批处理文件从文本文件中读取第一行?由于文件很大,我只想处理第一行.

cmd batch-file

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

cmd.exe(批处理)脚本中的数组,链接列表和其他数据结构

我正在玩cmd.exe,但在它的帮助下我没有找到任何信息,如何定义数组.

我发现,如何定义简单变量:

set a=10
echo %a%
Run Code Online (Sandbox Code Playgroud)

但是,我想创建数组,链表等...

那么,它能否在cmd.exe中使用(我的意思是:cmd.exe中是否存在任何数组关键字?)

我想实现一些算法:

  • 泡泡排序
  • 快速排序
  • 侏儒排序

等等...

所以,我也想知道,Cmd.exe是否有引用或实例,结构等?

导致其帮助不完整:/?

可以通过图灵机定义将Cmd.exe定义为完整吗?(图灵完成)

windows arrays cmd batch-file delayedvariableexpansion

58
推荐指数
5
解决办法
8万
查看次数

如何在/ F的循环内设置变量

我做了这个代码

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%

有任何想法吗?

cmd batch-file

45
推荐指数
3
解决办法
13万
查看次数

在批处理文件中打破嵌套for循环

在遇到这个问题两次后,我想我会在这里发布,看看是否有人知道如何绕过它.

我似乎无法突破嵌套循环使用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 的条件中断?

batch-file

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

批处理 - 将命令输出存储到变量(多行)

我知道这样做的方法有点像作弊但下面的代码创建一个临时文件,然后删除它.我不希望这种情况发生.这样做有适当或更好的方法吗?

command 2>> "temp"
set /p OUTPUT=<"temp"
del "temp"
echo %OUTPUT%
Run Code Online (Sandbox Code Playgroud)

我知道有一个使用for循环的解决方案但是对于返回多行结果的命令不起作用.我想将所有这些存储到我的变量中.(我试过这个代码顺便说一句)

windows command batch-file

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

Windows Batch:在循环中获取当前日期和时间

以下将打印 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)

在这里找到了这个。

但是,如果放置在循环中,初始数据和时间将不断打印,并且不会更新以反映新时间。

如何修改它以反映当前时间并在循环内工作?

谢谢

batch-file

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

将基于特定大小的日志轮换为带日期/时间戳的副本

碰巧的是,有一个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)

batch-file environment-variables

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

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
查看次数

创建 mdb 文件以在 Unity 中调试托管 DLL

我正在尝试在 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 …

scripting batch-file unity-game-engine visual-studio

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