相关疑难解决方法(0)

如何在Windows批处理文件中创建"是否确定"提示?

我有一个批处理文件,可以自动将一堆文件从一个地方复制到另一个地方,然后返回给我.唯一的事情就是它帮助我,我不小心选择了命令缓冲区中的命令,并大量覆盖未经修改的更改.

我的.bat文件需要什么代码才能让它说"你确定",并让我在运行文件的其余部分之前输入"y"吗?如果输入"y"之外的任何内容,它应该退出该行的执行.

编辑 11月27日好的我再次标记这个未答复,因为我仍然无法弄明白.当我打电话给"退出"时 它关闭cmd.exe这不是我想要的.这一切都是因为Windows实现了命令缓冲区错误[不同于我至少习惯的]

windows cmd batch-file

81
推荐指数
5
解决办法
10万
查看次数

Windows 批处理文件中的安全数字比较

我知道,在比较批处理文件中的内容是否相等时,通常将两边括在引号中,例如

IF "%myvar% NEQ "0" 
Run Code Online (Sandbox Code Playgroud)

但是,当使用“大于”或“小于”进行比较时,这不起作用,因为操作数将被视为带有引号的字符串。所以你可以这样做

IF %myvar% GTR 20000
Run Code Online (Sandbox Code Playgroud)

需要注意的是,如果变量 %myvar% 没有声明,那么就像这样做

IF GTR 20000
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误。

我想出了以下解决方法:

IF 1%myvar% GTR 120000
Run Code Online (Sandbox Code Playgroud)

我希望这会导致IF 1 GTR 120000ifmyvar未定义,并且它似乎有效。

这是比较数字和计算未声明变量的安全方法,还是我只是提出了一个全新的警告?

windows cmd batch-file

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

字面比较奇怪

所以 - 这是代码

@echo off
setlocal

for %%a in (a A j J z Z) do for %%c in (d D) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")

for %%a in (Blue blue BLUE Red red RED) do for %%c in (Pink pink PINK) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
Run Code Online (Sandbox Code Playgroud)

结果如下:

Microsoft Windows [Version 10.0.19042.804]
(c) 2020 Microsoft Corporation. All rights reserved.

"d" geq "a" …
Run Code Online (Sandbox Code Playgroud)

batch-file

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

IF 的奇怪结果

受到这个问题及其答案的启发,我做了一些测试。一个答案表明,数字太大(超过 32 位整数)并且它们被截断,但这并不能解释结果。同样显然它不会将双方作为字符串进行比较(正如我所期望的那样)。似乎if感到困惑并认为“好吧,我不知道 - 给它一个真实的”。(使用neq, gtr,lss而不是equ, geqleq总是给出 FALSE)。

如果任何一个a和/或b在 32 位整数的边界内或包含 [0-9] 之外的任何字符,则代码按预期工作。

@echo off
set a=333333333333
set b=444444444444
call :compare
set b=222222222222
call :compare
goto :eof

:compare
echo comparing %a% with %b%
if %a% geq %b% (echo a ^>= b) else (echo -)
if %b% geq %a% (echo b ^>= a) else (echo -)
if %a% leq %b% (echo a ^<= …
Run Code Online (Sandbox Code Playgroud)

cmd if-statement

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

Windows批处理文件中的IF条件下的“ ...”和x“ ...”之间有什么区别?

我最近在文章“ 查找子字符串是否在字符串中(而不是在文件中)”中发现

@setlocal enableextensions enabledelayedexpansion
@echo off
set str1=%1
if not x%str1:bcd=%==x%str1% echo It contains bcd
endlocal
Run Code Online (Sandbox Code Playgroud)

然后

x平等的双方之前是要确保字符串bcd工作好。它还可以防止某些“不合适的”起始字符。

但是,我还没有找到关于this实际效果的任何解释x。那么x"%string%"和之间有什么区别"%string%"

string batch-file

3
推荐指数
2
解决办法
1278
查看次数

forfiles-FALSE与false(不适用于小写字母吗?)

这是删除当前文件夹中除bat文件之外的所有文件的方法:

forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"bat\" del @file"
Run Code Online (Sandbox Code Playgroud)

(我在这里找到它)。

正如我发现的那样,如果更改FALSEfalse,它将无法正常工作。为什么?这是我的主要问题。

另外,旁边的问题。是正确的,第一个代码等于:

forfiles /c "cmd /c if @isdir==FALSE if /i not @ext==\"bat\" del @file"
Run Code Online (Sandbox Code Playgroud)

cmd batch-file

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

标签 统计

batch-file ×5

cmd ×4

windows ×2

if-statement ×1

string ×1