gpt4 book ai didi

windows - 如何处理文件名中的破折号

转载 作者:可可西里 更新时间:2023-11-01 10:36:38 24 4
gpt4 key购买 nike

在装有 Windows 7 的 PC 上,我使用一个简单的批处理脚本来重命名一些 Excel 文件,并在它们的父文件夹名称前添加:

for /f "delims=" %%i in ('dir /b /AD') do (
cd "%%i"
for /f "delims=" %%j in ('dir /b *.xl*') do ren "%%~j" "%%i_%%~j"
cd..
)

我注意到一些文件生成了一个错误,“系统找不到指定的文件。”这些文件的文件名中都有一个破折号 (—)。在我使用 Windows 资源管理器将破折号更改为常规连字符 (-) 后,该脚本在这些文件上运行良好。

我如何帮助脚本重命名这些文件?

最佳答案

您的问题不在于批处理变量:从命令行可以正常工作:

for %i in (*) do ren "%~i" "test_%~i"

但是,从中可以看出:

for /f "delims=" %i in ('dir /b /a-d') do @echo ren "%~i" "test2_%~i"

dir/b 正在将 em 破折号更改为连字符,因此 ren 命令显然找不到要更改的文件。

对于您的示例,您应该找到:

for /d %%i in (*) do (

for %%j in (*.xl*) do ...

应该可以正常工作。

如果您出于其他原因需要 dir/b,我现在看不到解决方案。

(我有一个令人费解的尝试将所有连字符换成问号,使用 SET/? 中描述的“环境变量替换”和“延迟环境变量扩展” CMD/?,允许任意字符匹配,然后再次使用ren模式匹配忽略问题。

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%I in ('dir /b /a-d') do (
Set K=%%I
ren "!K:-=?!" "test2_!K:-=?!"
)

但是 ren * x* x 替换文件的开头,所以上面的连字符替换为内容在插入 test_ 之前的那个位置。

所以这种方法能做的最好的事情就是将 em 破折号转换为连字符:

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%I in ('dir /b /a-d') do (
Set K=%%I
ren "!K:-=?!" "test2_!K!"
)

)

并确认问题出在 dir/b 的输出:在命令行上:

dir /b *—* > test.txt

是一个破折号,只会列出带有破折号的文件,但是在输出文件中,例如Notepad test.txt,您只会找到连字符,没有长破折号。

顺便说一句,我已经在 Windows 8.1 上完成了所有这些测试,VER 显示为 Microsoft Windows [Version 6.3.9600]

(正如我上面提到的,我在这个答案中确实有 ren * x*,但是 replaces 第一个字符为 x 而不是插入它,我一直认为 ren 会这样做!)

关于windows - 如何处理文件名中的破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22677677/

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