我想要执行一个脚本:
date 01/DD/2017
其中 DD 是 MM/DD/YYY 的当前日期
date /t
返回:MM/DD/YYYY ^^^^^^^^ 0123456 我认为:
%DATE:~3,%
返回 DD
如何将字符 3-4 的输出分配给变量 DD 并执行date 01/DD/2017
?DD 是当前日期的两位数。
我想要执行一个脚本:
date 01/DD/2017
其中 DD 是 MM/DD/YYY 的当前日期
date /t
返回:MM/DD/YYYY ^^^^^^^^ 0123456 我认为:
%DATE:~3,%
返回 DD
如何将字符 3-4 的输出分配给变量 DD 并执行date 01/DD/2017
?DD 是当前日期的两位数。
我有一个 Windows 应用程序,每当用户调整窗口大小或移动它时,我都想保存窗口坐标,除非这些事件是由于窗口最小化而引起的(此时坐标没有意义)。我的问题是,当窗口最小化时,消息 WM_MOVE 先于 WM_SIZE 出现,而我只能在 WM_SIZE 情况下检测最小化(使用测试 wParam == SIZE_MINIMIZED)。现在我注意到,在最小化的情况下,GetWindowRect 给出的 xy 坐标取值为 -32000,因此我可以对此进行测试,但这些值在不同系统之间可靠吗?有没有更好的方法?
谢谢你!
我正在开发一个 Windows 程序,该程序将值添加到 PATH 环境变量中。PATH 变量以分号 ( ;
) 分隔,可以包含任何有效的文件夹路径。但是,;
在文件夹路径中有效,因此在将包含分号的路径添加到路径时必须用双引号括起来:
C:\Program Files (x86);"C:\;My Folder";C:\Program Files
为了避免分号问题,我的程序将所有路径括在双引号中。但是,最近有人告诉我, Powershell 无法处理 PATH 变量中的引号值,因为它将引号视为普通字符:
我查看了 PowerShell 如何处理 Path 变量(基于此代码:PowerShell/PowerShell@16176ef/src/System.Management.Automation/engine/CommandDiscovery.cs#L1187-L1240)。据我所知,PowerShell 不会删除双引号 - 它只是在看到分号的地方拆分路径。
因此,PATH 值C:\Program Files (x86);"C:\;My Folder";C:\Program Files
被错误地解释为如下形式(如果我正确理解了发生了什么的话):
C:\Program Files (x86)
"C:\
My Folder"
C:\Program Files
以下视频演示了该行为(该行为仅发生在 Powershell 中,不发生在 cmd 中): https: //www.mediafire.com/file/aih2ky9fz07x5w0/powershellpathwithsemicolonsbug.mp4/file
我的程序处理这个问题的最佳方法是什么?而且,更紧迫的是,为什么 Powershell 不能处理带有引号的 PATH 值(即使 CMD 可以)?使用手动方式编辑路径值以包含分号 - Edit the system environment variables -> Path -> Edit
- 会导致 Windows 自动将所需路径括在引号中,从而破坏 Powershell。所以这不是我的程序或情况的问题 - 这是 Powershell 处理 PATH 方式的固有问题。
Powershell 中的这种行为是故意的吗?有没有解决方法,或者我必须妥协,要么 A. 将包含分号的路径括在引号中并允许这种错误行为发生,要么 B. 不允许在 PATH 中使用分号?
我一直尝试打印文件名,其中一些文件名中包含“!”。我目前的输出是打印不带“!”的文件名。
我尝试在循环内启用和禁用延迟扩展,但这似乎会引发一些错误。
错误:“已达到最大 setlocal 递归级别。”
我的批次的片段:
SETLOCAL EnableDelayedExpansion
FOR /f "tokens=*" %%A IN ('dir /B "%covers_dump_full_path%" ^| findstr /V /I /C:".html"') DO (
SET "game_name=%%A"
FOR %%F IN ("%%A") DO SET "game_name_no_ext=%%~NF"
if !current_column! == 1 (
ECHO ^<tr^>>> "%game_html%"
)
REM -------- THIS IS THE LINE THAT IS CAUSING ME ISSUES --------
ECHO ^<td align="center"^> ^<img src="!game_name!" width=300 height=250^> ^<br^> ^<b^> !game_name_no_ext! ^<br^> ^</b^> ^</td^>>> "%game_html%"
if !current_column! == !max_columns! (
ECHO ^</tr^>>> "%game_html%"
SET /a current_column=0
)
SET /a current_column=!current_column!+1
)
那么,即使文件名中包含“!”,我怎样才能打印文件名呢?
我曾想过使用混合脚本和 VBScript 来解决这个问题。但我试图将其制作成一个完整的纯 CMD 批处理脚本。除非没有任何解决方案,否则我不想重写我的批处理以包含 VBScript。
我有这个目录/文件结构:
S:\My Folder\BaseName 1\
S:\My Folder\BaseName 1\BaseName 1 1.lnk
S:\My Folder\BaseName 1\BaseName 1 1.txt
S:\My Folder\BaseName 1.lnk
S:\My Folder\BaseName 1.txt
S:\My Folder\BaseName 2\
S:\My Folder\BaseName 2\BaseName 2 1.lnk
S:\My Folder\BaseName 2\BaseName 2 1.txt
S:\My Folder\BaseName 2.lnk
S:\My Folder\BaseName 2.txt
我有一个脚本,它在目录中寻找 * .lnk文件,然后处理与找到的 *.lnk 具有相同 BaseName 的任何其他文件/文件夹。
当脚本解析 * S:\My Folder*时,它会找到BaseName 1.lnk和BaseName 2.lnk
现在我需要在S:\My Folder中找到所有具有相同 BaseNames 的子项(并且只能在那里找到,而不在子文件夹中),因此我需要找到BaseName 1文件夹和BaseName 1.txt文件。
但我无法做到这一点:
Get-ChildItem -Path ".\BaseName 1" -exclude *.lnk
返回目录BaseName 1的内容,这是我不需要的。Get-ChildItem -Path ".\BaseName 1*" -exclude *.lnk
仅返回BaseName 1.txt和目录BaseName 1的内容,这是我不想要的。Get-ChildItem -Path ".\BaseName 1.*" -exclude *.lnk
仅返回BaseName 1.txt但不返回我需要的目录BaseName 1。Get-ChildItem -Path "." -include "BaseName 1" -exclude *.lnk -recurse
仅返回目录BaseName 1,但不返回BaseName 1.txt文件Get-ChildItem -Path "." -include "BaseName 1*" -exclude *.lnk -recurse
返回所有内容,但同样,我不想要目录BaseName 1的内容我应该怎么办?
在以前版本的 Windows 中,任务管理器中“详细信息”选项卡上的“描述”列始终来自进程的主图像描述元数据。
然而,在 Windows 11 中,情况似乎并不总是如此。WebView2 组件的运行方式与 Chromium 通常的运行方式相同,它会从同一个可执行文件中运行多个工作进程;然而,它在 Windows 11 更新的任务管理器中为许多这样的工作进程显示了不同的描述值:
所有这些进程都使用相同的基本可执行文件;因此,尽管任务管理器似乎仍将可执行映像的描述显示为原始值,但必须存在某种新机制来覆盖此值的使用,而改用应用程序提供的字符串。此外,任务管理器似乎是唯一遵循此新提供的描述的工具,因为最新版本的 Process Explorer 似乎没有显示此信息。
我已经对这个问题进行了大量搜索,但没有找到任何关于如何做到这一点的文档(事实上,我甚至没有在任何地方找到任何参考资料表明其他人注意到这种情况正在发生/可能发生);因为关于这个问题的大多数讨论只涵盖 Windows 11 之前的任务管理器行为。
这是如何做到的,此功能是否适用于任意 Win32 应用程序?(我之所以问这个问题,是因为我的应用程序中有相同类型的多进程/单可执行架构,并且像 WebView2 那样为每个单独的进程添加专门的描述会非常有帮助。)
正如标题所述,我正在尝试在 ffmpeg 中批量合并同名的视频和音频
我试过
for %%A in (*.adx) do ( for %%B in (*.m2v) do ( ffmpeg -i %%A -i %%B %%B.mp4 ) )
但是,虽然它确实改变了所处理的视频,但音频保持不变。例如,如果我在 .adx 中有 A、B 和 C,在 .m2v 中有 A、B 和 C,则结果将是所有 3 个视频(A、B 和 C)都使用音频 A。
如何在 powershell 脚本中获取最近的 windows 启动时间?
目前我正在使用这条线
Get-WmiObject win32_operatingsystem -ComputerName myserver | Select-Object @{LABEL='LastBootUpTime';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}
它可以起作用(从返回有效日期的意义上来说),但该日期似乎不合理。
背景 - 由于预计会发生短暂断电,我刚刚关闭了服务器 5 分钟,重新启动后上述表达式返回 11/12/2024 03:31:04
(或大约 2 周前)。
这个日期可能是(也可能不是)启动时间,但肯定不是我几个小时前最后一次重启的时间。所以,要么返回的是启动时间以外的内容,要么短暂断电不算作重新启动(不知何故)。
有什么想法吗?
更新...好的,我尝试了以下方法
(Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime
和
Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime
他们都给我相同的两周前的启动日期。
我认为真正的问题是为什么重新启动没有记录在事件日志中。
在 Windows 上使用 git bash 时,多次按下 ESC 键,输入会被阻止,经过几秒甚至更长时间后,可能会出现以下信息:
MyHome+tomxue@DESKTOP-I23OD70 MINGW64 /d $ Display all 5486 possibilities? (y or n)
我找出了几个原因和一些解决方案,但都不起作用。如何解决?