gpt4 book ai didi

windows - 用于循环字符串替换的批处理文件

转载 作者:可可西里 更新时间:2023-11-01 11:13:33 26 4
gpt4 key购买 nike

我有一个以目录路径作为参数的批处理文件。

在该文件夹中,有任意数量的 .ai.pdf 或 .pdf 文件需要转换为 jpg。转换不是我的问题(我使用的是 imageMagick),但是去掉完整的扩展名是。

我需要能够从文件名中删除完整的 .ai.pdf(7 个字符)或 .pdf(4 个字符)并将其替换为 .jpg 我不能在 for 循环中只使用 ~n 因为它不会在有 .ai.pdf 的情况下取消 .ai(结果是文件名.ai,我只需要文件名)

StackOverFlow 上有很多关于这个的帖子 StackOverFlow Example

但无论我尝试什么,在从文件名中截断适当数量的扩展名时都会出现错误。

这是我的代码。这是我创建的第一个主要批处理文件,所以除了安装更多程序来完成这项工作之外,我对任何事情都持开放态度。

让我丧命的是,我有这个工作,在从一个服务器到另一个服务器的洗牌和一个星期的假期中,工作代码被......放错了地方。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set dir1=%1
echo recieved !dir1!
for /R %dir1% %%a in (*.pdf) DO (
echo file found !a!
set b=th_%%~nxa
if x%b:ai.pdf=%==x%b% set b=%%~dpa!b:~0,-7!
if not x%b:ai.pdf=%==x%b% set b=%%~dpa!b:~0,-4!

REM convert -density 64 "%%a" +matte -resize 15%% "!b!.jpg"
@echo !b! converted
)

ENDLOCAL

文件告诉我 %~dpa!b:~0,-7! 是一个无效的替换

有什么想法吗?感谢您的帮助!

最佳答案

先说几点:

!a!%%a 是两个不同的变量。

if x%b:ai.pdf=%==x%b% 并不代表您认为的那样。仅当 %b% 确实 包含 .ai.pdf 时才会如此。

同样,if not x%b:ai.pdf=%==x%b% 并不代表您的想法。当 %b% DOES 包含 .ai.pdf 时,这是真的。

不需要做任何校验和裁剪,直接查找替换即可。 (这就是 %y:x=z% 符号所做的,在此示例中,它将 %y% 中的每个 x 替换为 z.) 让搜索和替换进行验证。它只会替换匹配搜索的内容。这将加速您的批处理文件。

最后,由于您在 () 代码块中,您需要使用通过 setlocal 语句打开的延迟扩展。这是因为代码块中的所有内容都被视为在一行中。这意味着如果您更改代码块内的变量,您将无法使用 % 表示法看到新值。相反,您需要将 % 替换为 !。例如……

setlocal enableDelayedExpansion
set x=Hello
(
set x=Goodbye
echo I don't know why you say "!x!", I say "%x%".
)

...会给你披头士乐队的老歌词...

I don't know why you say "Goodbye", I say "Hello".

无论如何,关于你的答案:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set dir1=%1
echo recieved !dir1!
for /R %dir1% %%a in (*.pdf) DO (
:: Adding a colon to the end of the filename allows the extension to be ID'd
: without explicitly looking at it with an IF statement, while simultaneously
:: avoiding similar looking character groupings inside the filename.
set b=th_%%~nxa:
:: No need to check for case, the substitution will do that for you.
set b=!b:.ai.pdf:=.jpg!
set b=!b:.pdf:=.jpg!

REM convert -density 64 "%%a" +matte -resize 15%% "!b!"
echo %%a converted into !b!
)

ENDLOCAL

缺点是两个文件...

X.ai.pdf
X.pdf

...将被翻译成th_X.jpg,为两个不同的文件创建重复文件名的可能性。

但这对于您将两种类型的文件名一视同仁的概念是固有的。如果您没有避免这种重复的方法,那么将 .ai 保留在文件中可能不是一个坏主意,从而创建两个文件:th_X.jpgth_X.ai.jpg,消除了重复文件名的可能性。

关于windows - 用于循环字符串替换的批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537263/

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