gpt4 book ai didi

Windows:从 CMD 返回值以存储为变量

转载 作者:可可西里 更新时间:2023-11-01 10:44:21 27 4
gpt4 key购买 nike

我有一个 Windows CMD 脚本,它正在我们 Wintel Assets 中的许多机器上处理文件,并将它们提供给我们的 SFTP 网关。

作业采用多个参数来确定要处理给定目录中的哪些文件。当作业执行时,它会扫描目录以查找与正则表达式 %FM_PREF%(Filemase 前缀)和 %FM_SUFF%(Filemask 后缀)匹配的文件,并继续将“最旧”的文件名存储为变量(“%FILE_IN_PROCESS ")

这是通过以下方式实现的:

for /F "usebackq delims=" %%f in (`dir /b /o:-d "%FM_PREF%"*."%FM_SUFF%"`) do set FILE_IN_PROCESS=%%f

然后它通过检查以下的 %ERRORLEVEL% 来检查它是否可以获得文件的独占锁:

echo.N|copy /-y NUL "%FILE_IN_PROCESS%" 1>NUL 2>NUL

我刚刚遇到的问题是,我被要求使用这个过程来处理打印服务器上的文件,而正在创建的文件的文件名中包含空格。

这不是什么大问题,因为我可以通过这样做来重命名“%FILE_IN_PROCESS%”:

echo %FILE_IN_PROCESS% | find " " 
if %ERRORLEVEL% EQU 0 cmd /e:on /v:on /c "for %f in ("%FILE_IN_PROCESS%") do (set "n=%~nxf" & set "n=!n: =_!" & ren "%~ff" "!n!" )"

挑战在于我想要 !n! 的值返回到父进程,以便我可以将 %FILE_IN_PROCESS% 变量重置为新文件名(已将空格转换为下划线)

我被困住了...作为 20 多年的 Unix 系统管理员,Windows/DOS/CMD 文件不是我的专业领域。

是否有可能将一个值返回到生成“cmd/e ......”命令的原始作业,或者我是否必须编写一个讨厌的解决方法,比如在磁盘上创建一个临时文件并将其读回 %FILE_IN_PROCESS% 变量?

建议感谢 ???


由@jeb 回答我创建了一个名为“dave.cmd”的脚本的简化版本

setlocal EnableDelayedExpansion
set FM_PREF=TNO_A4
set FM_SUFF=tno
for /F "usebackq delims=" %%f in (`dir /b /o:-d "%FM_PREF%"*."%FM_SUFF%"`) do set FILE_IN_PROCESS=%%f
echo.
echo pre FILE_IN_PROCESS=%FILE_IN_PROCESS%
echo.
echo "%FILE_IN_PROCESS%" | find " " 1> NUL 2>NUL
if %ERRORLEVEL% EQU 0 (
set "newName=!FILE_IN_PROCESS: =_!"
ren "!FILE_IN_PROCESS!" "!newName!"
)
set FILE_IN_PROCESS=%newName%
echo post FILE_IN_PROCESS=%FILE_IN_PROCESS%

然后证明它有效:

C:\temp\space>date /t > "TNO_A4 a b c dave.tno"

C:\temp\space>.\dave.cmd

pre FILE_IN_PROCESS=TNO_A4 a b c dave.tno

post FILE_IN_PROCESS=TNO_A4_a_b_c_dave.tno

C:\temp\space>

最佳答案

我完全不明白你为什么需要它?
您不需要启动子 cmd,您可以在同一个批处理上下文中执行。

setlocal EnableDelayedExpansion
...

if %ERRORLEVEL% EQU 0 (
set "newName=!FILE_IN_PROCESS: =_!"
ren "!FILE_IN_PROCESS!" "!newName!"
)

但我想知道您是否可以只使用未修改的名称?

关于Windows:从 CMD 返回值以存储为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33301673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com