【问题标题】:Rename file using batch file使用批处理文件重命名文件
【发布时间】:2019-05-25 01:04:30
【问题描述】:

我知道有很多这样的例子,但我就是不明白,这不应该那么困难,但我发现它是。

我有一个文件夹,里面有 4 个文件:

rtcc_current_pnp_data1-2018-12-26-061000.txt
rtcc_current_pnp_data2-2018-12-26-061000.txt
rtcc_current_pnp_data3-2018-12-26-061000.txt
rtcc_current_pnp_data4-2018-12-26-061000.txt

最后的日期/时间每天都在变化。

每天我都想运行一个批处理文件将这些文件重命名为:

data1.txt 
data2.txt
data3.txt 
data4.txt

就是这样...有人可以帮我从文件中提取正确的名称并重命名吗?

所以我尝试了这个,它没有做任何事情:

for %%A in (\\apdwhdb01\D$\ProbationImportFolder\Current\rtcc*.*) do (
  set "filename=%%A"
  set "newName=EXP_!filename:~18!"

  rem ** remove the ECHO when it seems to work
  ren !filename! !newName!
)

【问题讨论】:

  • 正如您所说,有很多示例,请阅读它们,创建您的代码,然后回到这里edit your question,如果您编写的代码没有按预期执行。然后,您将在遵循How to Ask 中提供的建议后发布代码的minimal reproducible example从技术上讲,这个主题应该作为重复关闭,所以我建议你尽早考虑我的建议。
  • 我也试过这个:experts-exchange.com/questions/28127794/… stackoverflow.com/questions/19140044/… robvanderwoude.com/battech_rename.php 很抱歉没有提供更多细节,但我整天都在寻找这个并且非常沮丧
  • 将您找到的示例中的一些代码放在一起是您的责任,而不是我们的。虽然我很欣赏在您不熟悉的情况下将代码拼凑起来并不总是一项简单的任务,但它对会员和网站本身都很有礼貌,以显示一些努力。
  • 我试图将示例中的代码放在一起但失败了——这就是我寻求帮助的原因。我挣扎的部分原因是因为我找不到所有这些命令的作用的任何解释。我什至不知道要搜索哪些术语来弄清楚这是在做什么@echo off pushd "pathToYourFolder" || exit /b for /f "eol=: delims=" %%F in ('dir /b /ad _.jpg') do ( for /f "tokens=1* eol=_ delims =_" %%A in ("%%~nF") do ren "%%F" "%%~nB_%%A%%~xF" ) 从这篇文章中弹出:stackoverflow.com/questions/14013145/windows-batch-file-rename
  • 要了解命令的作用,请打开命令提示符窗口并输入带有问号选项的命令,例如For /?Set /?Ren /?....

标签: batch-file rename


【解决方案1】:

最简单的方法是这样:

 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data1*.txt" data1.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data2*.txt" data2.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data3*.txt" data3.txt
 ren "\\apdwhdb01\D$\ProbationImportFolder\Current\*data4*.txt" data4.txt

但是,您可能面临的问题是网络连接对您的连接无效/无效。找出答案的最简单方法是:

 dir "\\apdwhdb01\D$\ProbationImportFolder\Current"

如果它返回您的文件列表,那么您就可以了。如果没有,那么您需要先在同一个批处理文件中映射驱动器:

 :: temporarily map the network share to the Q: drive.
 :: make sure you update the username and password
 net use q: "\\apdwhdb01\D$\ProbationImportFolder\Current" /user:MyUserName myPassword

 :: rename the files
 ren "q:\*data1*.txt" data1.txt
 ren "q:\*data2*.txt" data2.txt
 ren "q:\*data3*.txt" data3.txt
 ren "q:\*data4*.txt" data4.txt

 :: remove the mapped drive
 net use q: /delete

【讨论】:

  • 谢谢你,我让它变得比它需要的复杂得多!
【解决方案2】:
@echo off

pushd "\\apdwhdb01\D$\ProbationImportFolder\Current" || exit /b 1

for %%A in (data1 data2 data3 data4) do (
    for %%B in ("rtcc_current_pnp_%%~A-20*.txt") do (
        ren "%%~B" "%%~A.txt"
    )
)

popd

pushd 会将网络共享映射到临时映射驱动器。 || 是如果左边的命令失败, 执行右边的命令, 这是结束脚本的exit /b 1

for 循环遍历 data1data2data3data4

嵌套的for 循环使用%%A 迭代文件名 值为data1,并使用通配符作为日期戳变体。 %~B 是重命名为 %%~A.txt 的当前文件名, 其中%%~A 保存当前值,即data1%%~A 中的 ~ 是一个修饰符,它将删除周围的双引号。

popd 将恢复之前的当前工作目录 pushd 改变了。它应该删除临时映射驱动器。

要获得有关命令的帮助,请使用 pushd /?,它将打印 出帮助信息。 for /? 打印有关 forren /? ... 等的帮助信息。

【讨论】:

  • 谢谢!我明天上班时会检查一下。感谢您的解释,并觉得我会真正学到一些东西。
【解决方案3】:

两行脚本示例:

@PushD "\\apdwhdb01\D$\ProbationImportFolder\Current" 2>Nul || Exit /B
@For %%A In ("rtcc_*.txt") Do @For /F "Tokens=4 Delims=_-" %%B In ("%%A") Do @Ren "%%A" "EXP_%%B%%~xA"

有关所用命令的信息,请打开命令提示符并输入以下各项:

PushD /?
退出 /?
对于 /?
任/?

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2019-06-08
    • 2013-06-25
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2012-12-10
    • 2017-09-16
    相关资源
    最近更新 更多