用于删除始终相同的文件名部分的bat脚本

时间:2014-02-07 18:36:13

标签: batch-file

我正在尝试创建一个bat文件来从这多个文件中删除-en-us:

即。每月销售和取消-en-us.pdf将重命名为每月销售和取消.pdf。

以下此脚本适用于本地计算机。但是,如果我定义了一个共享驱动器的filesharelocation,并运行它,那么我收到了这个错误:

找不到档案 系统找不到指定的文件。

以下是我正在使用的脚本:

@echo off
setlocal enabledelayedexpansion
set deletestring=-en-us
set filesharelocation=\\companyname\DEV\Testing
for /f "delims==" %%F in ('dir %filesharelocation% /b /l *-en-us.pdf ^| find "%deletestring%"') do (
    set oldfilename=%%F
    set newfilename=!oldfilename:%deletestring%=!
    Ren "!oldfilename!" "!newfilename!"
    )

有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:1)

在编码时,%%F返回dir命令输出中的内容,即只返回没有路径的文件名。

如果从包含文件的同一目录执行,则没有问题,但是当您再次运行其他驱动器/文件夹的内容时,%%F不包含文件的路径,并且文件与批处理文件不在同一文件夹中,即行

Ren "!oldfilename!" "!newfilename!"

(使用从%% F获取的oldfilename)不包含任何路径,只包含文件名。

最简单的解决方案是添加路径。

Ren "%filesharelocation%\!oldfilename!" "!newfilename!"

或者,您可以将当前驱动器更改为包含文件的文件夹

pushd "%filesharelocation%"
for /f "delims==" %%F in .....
    .....
)
popd