为什么这个程序不会回显任何字符串?

时间:2014-12-25 10:12:17

标签: windows batch-file

背景 - 我正在整理,备份和存档我祖母的照片。我刚刚遇到一组文件夹,其中所有文件扩展名在末尾都有一些垃圾编号 (100_105.jpg_25_1025, 100_106.jpg_26_1026, ...)
我试图创建一个批处理程序来识别文件名部分,由句点(".")分隔,然后从第二部分中删除任何将被定义为下划线{{1}的垃圾部分和之后的任何事情。 但是,我很早就遇到了障碍。我无法让程序吐出文件名的第二部分 这就是我发生的事情......

("_")

没有任何错误。绝对没有输出。我的回声看起来像这样......

for %%G in (*.jpg*) do (
for /f "tokens=* delims=." %%a in (%%G) do echo %%b)

如果我将G:\Project>(for /F "tokens=* delims=." %a in (100_0661.jpg_25_1026) do echo %b 替换为(%%G),则会提供" (100_0661.jpg_25_1026)"的预期输出。

这有什么问题?这个问题有更好的解决方案吗?我知道几乎没有任何编程术语,所以请放轻松。

3 个答案:

答案 0 :(得分:2)

从我所看到的,你不需要编写整个程序的脚本。尝试:

rename *.jpg* *.jpg

根据您的示例文件名100_105.jpg_25_1025100_106.jpg_26_1026,您最终会得到100_105.jpg100_106.jpg

自DOS日以来,这种通配符替换一直是rename经常被忽视的特征......

答案 1 :(得分:1)

for %%G in (*.jpg) do (
  for /f "tokens=1* delims=." %%a in ("%%G") do echo %%b
)

在引号中设置%% G将其作为字符串处理。否则将尝试将%% G作为文本文件读取。

但是有更简单的方法来重命名图片。将此作为蝙蝠放在与图片相同的目录中(%% ~nG将图片扩展为其名称而不带扩展名):

@echo off

    for %%G in (*.jpg_*_*) do (
        ren "%%~nxG"  "%%~nG.jpg" 
    )

它不会在子目录中搜索。并且只会处理应用掩码*.jpg_*_*的文件。它也可以处理子文件夹,但在问题中没有提到。

答案 2 :(得分:0)

我推荐名为Rename Master的gui免费软件。它可以做你想要的事情以及更多,它提供了在运行之前结果的预览。