相关疑难解决方法(0)

批处理文件:如何读取文件?

如何从批处理文件中读取文件(文本或二进制文件)?有一种方法可以在二进制模式或文本模式下读取它吗?

file batch-file

91
推荐指数
4
解决办法
37万
查看次数

使环境变量在ENDLOCAL中生效

我有一个批处理文件,通过一系列中间变量计算变量:

@echo off
setlocal

set base=compute directory
set pkg=compute sub-directory
set scripts=%base%\%pkg%\Scripts

endlocal

%scripts%\activate.bat
Run Code Online (Sandbox Code Playgroud)

最后一行的脚本没有被调用,因为它来自endlocal,它破坏了scripts环境变量,但它必须在endlocal之后,因为它的目的是设置一堆其他环境变量供用户使用.

如何调用脚本的目的是设置永久环境变量,但是谁的位置是由临时环境变量决定的?

我知道我可以在endlocal之前创建一个临时的批处理文件,并在endlocal之后调用它,如果没有别的东西可以解决,我会这样做,但我想知道是否有一个不那么令人讨厌的解决方案.

batch-file environment-variables

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

退出批处理文件中的FOR循环?

为什么这个批处理文件永远不会脱离循环?

For /L %%f In (1,1,1000000) Do @If Not Exist %%f Goto :EOF
Run Code Online (Sandbox Code Playgroud)

不应该Goto :EOF突破循环?

编辑:

我想我应该更明确地问... 我怎么能摆脱循环?

for-loop batch-file break

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

启用和禁用延迟扩展,它有什么作用?

我见过SETLOCAL ENABLEDELAYEDEXPANSIONSETLOCAL DISABLEDELAYEDEXPANSION许多批处理文件,但什么命令实际上做?

batch-file

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

如何将变量的值保留在使用"延迟扩展本地"模式的Windows批处理脚本之外?

上下文:我需要调用一个Windows批处理脚本,PATH通过xxx在其末尾添加另一条路径来更新我,但是:

  • 没有任何重复
    (如果我添加' xxx'到PATH' aaa;xxx;bbb'',我需要更新PATH像' aaa;bbb;xxx')
  • 没有任何聚合
    (我可以反复调用脚本而不用' aaa;bbb;xxx;xxx;xxx;...' 结束)

我尝试过的:

以下功能负责处理任何重复并完成工作

:cleanAddPath -- remove %~1 from PATH, add it at the end of PATH
SETLOCAL ENABLEDELAYEDEXPANSION
set PATH=!PATH:%~2=!
set PATH=!PATH:;;=;!
set PATH=%PATH%;%~2
set P=!P:;;=;!
echo %PATH%
echo -------------
ENDLOCAL  
exit /b
Run Code Online (Sandbox Code Playgroud)

但是,它需要延迟扩展本地模式,这意味着:在脚本结束时(或者在这里,在函数结束时cleanAddPath),已经设置的任何内容都被%PATH%丢弃.

我可以要求用户(我为其编写脚本)启动他们cmdcmd /V:ON选项(激活延迟扩展,否则默认关闭),但这是不切实际的.

如何按PATH上述方式修改变量,并调用所述脚本仍在当前的DOS会话中更新?

windows path batch-file environment-variables

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

使用批处理脚本重命名目录中的多个文件

我有大约1000张图像,它们的名字就像"IMG-12223".我想将它们重命名为1 2 3 4 ... 1000.我该怎么做.我写了一个批处理脚本列出文件,但我不知道如何重命名每个文件.例如,将名称为"IMG-12223"的第一个图像重命名为1,将名称为"IMG-23441"的第二个图像重命名为2,依此类推......

for /r %%i in (*) do (
    echo %c% 
)
Run Code Online (Sandbox Code Playgroud)

rename file batch-file

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

在多行中批量创建数组

我正在尝试使用批处理文件将文件列表复制到特定目录.我需要做的第一件事是创建一个文件名列表.我在Windows Batch中看到了这篇文章创建列表或数组.以下工作正常.但我对它在一条线上的事实并不满意.随着我的文件列表变得越来越大,它变得难以阅读.

set FILE_LIST=( "file1.txt" "file2.txt" "file3.txt" )
Run Code Online (Sandbox Code Playgroud)

然后我注意到了这个博客.它创建一个包含多行的数组.

set FILE_LIST[0]="file1.txt"
set FILE_LIST[1]="file2.txt"
set FILE_LIST[2]="file3.txt"
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种创建数组的方法如下:

set FILE_LIST=( "file1.txt" 
     "file2.txt" 
     "file3.txt" )
Run Code Online (Sandbox Code Playgroud)

这样我就可以将文件名分成多行,而不需要担心索引.

windows arrays batch-file

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

如何在Windows批处理脚本中调用IF-ELSE IF条件?

我们在一个文件夹中有数百个*.pdf文件.每个*.pdf都将命名约定为ABC_100_filename.pdfor ABC_200_filename.pdfABC_300_filename.pdf.

在批处理脚本中,我们调用*.exe文件,如下所示:

call test.exe 100  filename
call test.exe 200  filename
call test.exe 300  filename
Run Code Online (Sandbox Code Playgroud)

由于没有IF条件来验证文件,我们错误地加载了ID不正确的文件.

预期结果:test.exe 100应该调用文件ABC_100_Testfile.pdf.

我们错误地调用test.exe 200而不是执行此文件.

如何编写IF-ELSE IF条件以在批处理脚本中调用.exe文件.

if %str1:~0,7%==ABC_100 (call test.exe 100 filename)
pause
if %str2%==ABC_200 (call test.exe 200 filename)
Run Code Online (Sandbox Code Playgroud)

windows batch-file

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