AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[batch-file](coding)

Martin Hope
Jeff
Asked: 2025-01-09 07:07:04 +0800 CST

如何将包含(内部)引号的变量传递到函数/标签?

  • 5
@echo off
setlocal enabledelayedexpansion

set "MYFLAGS=/q:a /c:"2005_8~1.EXE /q:a /c:""msiexec /i vcredist.msi /qn""""

echo %MYFLAGS%
REM OUTPUT: /q:a /c:"2005_8~1.EXE /q:a /c:""msiexec /i vcredist.msi /qn"""
REM Good output-----------------------------------------------------------

call :InstallProgram "vc_redist.exe" "%MYFLAGS%"
goto :eof

:InstallProgram
set "PROGRAM_FLAGS=%~2"

echo %PROGRAM_FLAGS%
REM OUTPUT: /q:a /c:"2005_8~1.EXE
REM Truncated output-------------^

goto :eof

无论我在语句MYFLAGS内部还是外部定义call都会产生相同的结果,:InstallProgram函数中的回显会过早停止。

有什么想法吗?一定有批处理天才在某个地方。

enabledelayedexpansion在我的脚本的其他部分是必需的。

我知道有人会问,最终目标是完全静默安装,不需要向用户提示重新启动。

batch-file
  • 2 个回答
  • 50 Views
Martin Hope
user2931494
Asked: 2024-12-30 20:29:06 +0800 CST

使用 .bat 文件将重复文件移动到子文件夹

  • 5

当我运行以下批处理时,它会创建一个文件夹“重复”,并显示脚本当前所在文件夹中的重复文件(按大小)。我是 BATCH 的新手,我无法让其将重复文件移动到“重复”文件夹。

@echo off

setlocal EnableDelayedExpansion

if not exist duplicates mkdir duplicates

for /R %%a in (*.*) do (
    set "size[%%~Za]=!size[%%~Za]!,%%~Fa"
)

for /F "tokens=2,3* delims=[]=," %%a in ('set size[') do (
    if "%%c" neq "" echo %%b,%%c
)

pause

我试过了,if "%%c" neq "" copy %%b duplicates/ rm %%b,copy %%c /duplicates rm %%b但没用。任何帮助我都感激不尽。谢谢!

batch-file
  • 2 个回答
  • 40 Views
Martin Hope
H.v.M.
Asked: 2024-12-22 07:57:10 +0800 CST

使用 SETLOCAL ENABLEDELAYEDEXPANSION 的批处理脚本中带有“!”后跟“:”的字符串

  • 6

我有一个使用和接受用户输入的脚本。如果输入字符串包含和,SETLOCAL ENABLEDELAYEDEXPANSION则会出现问题,因为这些字符及其之间的所有内容都会被删除。!:

示例:我将a!b:c用户输入输入到x并将其直接保存到脚本中作为y和z。

SETLOCAL ENABLEDELAYEDEXPANSION
SET x=
SET /P x=
SET y=a!b:c
SET "z=a!b:c"
echo %x% %y% %z%

结果是ac ac ac。对于直接输入的字符串(如y和z),我该如何修复这个问题?对于用户输入的字符串(如),我该如何修复这个问题x?

batch-file
  • 2 个回答
  • 51 Views
Martin Hope
WeirdGuy
Asked: 2024-12-16 22:02:33 +0800 CST

批处理“echo|set/p=”在行末添加一个空格

  • 6

使用“echo|set/p=”打印没有回车符和换行符的行时遇到了一点麻烦。也就是说,我在创建的文本末尾得到了一个不需要的空格,而我还没有找到删除它的方法。

示例:echo TEST>>TEST.TXT在批处理命令行中运行会产生一个文件,其中包含 TEST,后跟回车符和换行符。

在批处理命令行中运行会echo|set/p=TEST>>TEST.TXT产生一个文件,其中包含 TEST,后跟一个空格字符,但没有回车符或换行符。

这个神秘空间究竟从何而来,有什么办法可以消除它?

batch-file
  • 1 个回答
  • 37 Views
Martin Hope
rory
Asked: 2024-11-19 19:55:18 +0800 CST

批处理文件调用 lessc 尽管执行成功但未返回控制

  • 5

我有这个批处理文件,但是在链接命令后无法让它返回控制权:

set hostingDir=%cd%
cd "%hostingDir%\MVC\wwwroot
call webpack --config webpack.config.js --stats=summary

cd "%hostingDir%\MVC\wwwroot\styles"

REM Compile LESS files
call "E:\Node\lessc" --glob --source-map --clean-css "style.less" "style.min.css"^
&& "E:\Node\lessc" --glob --source-map --clean-css "style-below.less" "style-below.min.css"
 
REM Return to base directory -- don't get to here
cd %hostingDir%

PAUSE

但是,如果我删除链接并仅在 2 个 less 文件中的任何一个上调用 lessc,则整个脚本都会执行。所以我知道 less 文件本身没有问题。我删除了编译后的文件并再次运行以确保它们可以编译,并且确实可以。即使两个命令链接在一起。

batch-file
  • 1 个回答
  • 22 Views
Martin Hope
Mike0101
Asked: 2024-11-16 04:01:28 +0800 CST

如果注册表项为空则删除(一行代码)

  • 5

我正在尝试执行一行批处理命令,如果 Key 为空,它将删除该 Key。以下是 2 个应该可行但出于某种奇怪的原因却行不通的解决方案。😩

For /f "tokens=*" %%a in ('Reg Query "HKCU\Software\RandomKey" 2^>NUL ^| FindStr /l /i /c:"\\Software\\RandomKey\\"') do (EXIT) ^& Reg Delete "HKCU\Software\RandomKey" /f 1>NUL

For /f "tokens=*" %%a in ('Reg Query "HKCU\Software\RandomKey" 2^>NUL ^| FindStr /l /i /c:"\\Software\\RandomKey\\"') do Set "FSK=1" ^& If Not "%FSK%"=="1" Reg Delete "HKCU\Software\RandomKey" /f 1>NUL
batch-file
  • 1 个回答
  • 51 Views
Martin Hope
Miguel Arrieche
Asked: 2024-11-08 12:34:54 +0800 CST

Ffmpeg 没有设置正确的变量名称,因此抛出无法选择格式

  • 5

我正在尝试自动将字幕添加到包含一些视频的文件夹中,因此我编写了以下脚本:

forfiles /p "C:\Users\titos\Resilio_Sync\4K_Video_Downloader\videoprocess" /m *.mp4 /C "cmd /c set filename=@fname & ffmpeg -i @file -vf subtitles="C:\Users\titos\Resilio_Sync\4K_Video_Downloader\videoprocess\@fname.srt" -f mp4 "C:\Users\titos\Resilio_Sync\4K_Video_Downloader\donesubs\@fname_srt.mp4""

但是,脚本为每个视频都抛出了以下错误:

[AVFormatContext @ 0000020c20220680] Unable to choose an output format for 'Der'; use a standard extension for the filename or specify the format manually.
[out#0 @ 0000020c20220580] Error initializing the muxer for Der: Invalid argument
Error opening output file Der.
Error opening output files: Invalid argument

在这种情况下,“Der”是视频标题的第二个单词(并且它对每个视频都做同样的事情,它会在第二个单词处抛出错误)。所以我认为这可能是由于视频包含空格并且 ffmpeg 无法正确解析它?但为什么在这种情况下它得到的是第二个单词而不是第一个单词?更重要的是,我该怎么做才能解决这个问题?

我确实找到了一些讨论类似问题的其他帖子,但坦率地说,我仍然太新手了,无法理解任何答案,因此无法将其改编到我的脚本中,哈哈。感谢您的帮助,提前谢谢 :)

batch-file
  • 2 个回答
  • 51 Views
Martin Hope
darkrip
Asked: 2024-10-08 18:35:00 +0800 CST

在命令完成之前批量处理命令输出

  • 6

我尝试打印命令输出的时间(以 ping 为例)。

echo([!time!] start
for /f "usebackq delims= eol=" %%A in (`ping ::1`) do (
  echo([!time!] __ %%A
)
echo([!time!] finish

但结果我得到了

[12:37:08.78] start
[12:37:12.04] __ Pinging ::1 with 32 bytes of data:
[12:37:12.04] __ Reply from ::1: time<1ms
[12:37:12.04] __ Reply from ::1: time<1ms
[12:37:12.04] __ Reply from ::1: time<1ms
[12:37:12.04] __ Reply from ::1: time<1ms
[12:37:12.04] __ Ping statistics for ::1:
[12:37:12.04] __     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
[12:37:12.04] __ Approximate round trip times in milli-seconds:
[12:37:12.04] __     Minimum = 0ms, Maximum = 0ms, Average = 0ms
[12:37:12.04] finish

看起来循环仅在命令完成后才开始工作。有没有办法在命令完成之前处理命令输出?

batch-file
  • 2 个回答
  • 31 Views
Martin Hope
Sahar Kord
Asked: 2024-09-26 01:25:55 +0800 CST

验证快捷方式文件中引用的可执行文件是否存在

  • 6

我有一个file.lnk来自另一条路径的快捷方式(在桌面上称为)file.exe。

然后我在桌面上的快捷方式(file.lnk)附近有一个 run.bat。

我的run.bat内容代码如下:

Start "" file.lnk Echo "all done or crashed shortcut even my shortcut corrupted continue to process and don't stop"。

我的问题如下:

当我的file.exe被删除(我的快捷方式file.lnk已损坏)时,然后是 run.bat,它会向我显示一个弹出消息,说您的文件已被删除。请选择三个选项之一(恢复文件 - 删除文件 - 取消),但我不想停止弹出的过程。我想继续,即使每次出现错误或弹出。

(这是我的结构。我必须使用快捷方式,唯一需要做的就是跳过损坏的快捷方式消息或自动回答已删除的问题file.lnk。我不想停止这个过程)。

在@stephan 帮助后我尝试了此代码。

@echo off
:this is for check all shortcut file in a folder
for %%x in (*) do (
    set shortcutpath=%%~x
    for /f "tokens=2 delims==" %%a in ('wmic path win32_shortcutfile where "name='%shortcutpath:\=\\%'" get target /value') do (IF EXIST %%a echo "no problem,File exist & can you start")
)
echo by
pause

我也尝试使用!var!,但是没有用。

另外,使用!shortcutpath:\=\\!。它可以工作并%%a给我正确的输出(快捷方式目标路径),但是当我想检查IF EXIST该路径字符串时('%%a')。

它给出了错误的输出,虽然路径是正确的,但似乎IF EXSIST无法在循环中检查。

batch-file
  • 2 个回答
  • 28 Views
Martin Hope
iko79
Asked: 2024-09-20 17:27:34 +0800 CST

带返回值的cmd批处理脚本函数

  • 6

我在这里toUpper和 stackoverflow 上找到了用于批处理文件的字符串函数,但我不知道如何使用它们。我找到了几个示例和说明,其中一些是矛盾的,但出于某种原因,它们对我都不起作用。我如何在 .bat 文件中使用这样的函数?以下是示例代码:toUpper

@echo off
setlocal enabledelayedexpansion

:: Main script starts here
set "arg=exampleString"

:: Output the original
echo Original: %arg%

:: Call the toUpper function to convert %arg% to uppercase
call :toUpper arg

:: Output the result
echo Uppercase: %arg%

EXIT /b 1


:toUpper str -- converts lowercase character to uppercase
if not defined %~1 EXIT /b
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I"
            "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R"
            "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä"
            "ö=Ö" "ü=Ü") do (
    call set %~1=%%%~1:%%~a%%
)
EXIT /b

我得到的是:

Original: exampleString
Uppercase: "ü=Ü"rg:ü=Ü

这里发生了什么事?

编辑:添加了缺失的返回语句(请参阅评论以回答)

batch-file
  • 1 个回答
  • 53 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve