【发布时间】:2014-01-14 11:44:14
【问题描述】:
我正在尝试重命名文件夹中的所有文件(所有 .exe 文件)。我想用下划线替换所有空格,例如qwe qwe qwe asd.exe 到 qwe_qwe_qwe_asd.exe。
我需要使用命令行来执行此操作。我尝试了很多我在互联网上甚至在这个网站上找到的可能的解决方案,但我无法让它发挥作用。
我还需要在“单行”/“一个命令”中执行此操作,但我会接受所有有效的答案。
【问题讨论】:
我正在尝试重命名文件夹中的所有文件(所有 .exe 文件)。我想用下划线替换所有空格,例如qwe qwe qwe asd.exe 到 qwe_qwe_qwe_asd.exe。
我需要使用命令行来执行此操作。我尝试了很多我在互联网上甚至在这个网站上找到的可能的解决方案,但我无法让它发挥作用。
我还需要在“单行”/“一个命令”中执行此操作,但我会接受所有有效的答案。
【问题讨论】:
改编自这里:
https://stackoverflow.com/a/16129486/2000557
@echo off
Setlocal enabledelayedexpansion
Set "Pattern= "
Set "Replace=_"
For %%a in (*.exe) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)
Pause&Exit
使用上述内容创建一个批处理文件(*.bat)。将该批处理文件放在包含所有 .exe 的文件夹中,当您运行它时,它将用下划线替换空格。
【讨论】:
for %i in (*.css) do ( ren "%~i" "_%~i.scss" ) => 将所有扩展名为 .css 的文件重命名为“_ORIGINALFILENAME.scss”
单排
cmd /e:on /v:on /c "for %f in ("* *.exe") do (set "n=%~nxf" & set "n=!n: =_!" & ren "%~ff" "!n!" )"
生成一个 cmd 实例,启用扩展和延迟扩展,并且对于名称中带有空格的每个 exe 文件,用下划线替换空格并用新名称重命名文件
【讨论】:
for %f 替换为 for /r %f...
使用文件:
forfiles /m *.exe /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==FALSE ren @file !Phile: =_!"
在forfiles 之后添加/s 以递归遍历子文件夹。
【讨论】:
Phile: =_!。 = 之前的任何内容都将被替换。 = 后面的内容将被替换。
设置数据=%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time: ~6.2% 设置数据=%data:=0%
【讨论】:
简单如下:
set filename=qwe qwe qwe asd.exe
set filename=%filename: =_%
【讨论】:
set filename=qwe qwe qwe asd.exe, set filename2=%filename: =_%, ren "filename" "filename2"
基于@Gray 的回答,我已经扩展它以递归地替换所有子目录中的文件名。
文件 1:replace.bat
setlocal enabledelayedexpansion
set "pattern= "
set "replace=_"
for %%I in (*.ext) do (
set "file=%%~I"
ren "%%I" "!file:%pattern%=%replace%!"
)
文件 2:recursive.bat
for /d /r . %%D in (*) do (
copy replace.bat "%%D\replace.bat"
cd "%%D"
replace.bat
del replace.bat
cd..
)
文件
replace.bat 包含将 space 替换为 underscore 的脚本
recursive.bat 包含在所有子目录中执行递归的脚本如何使用?
replace.bat 和recursive.bat 保存在同一目录中。.ext 替换为所需的文件扩展名以匹配replace.bat 中的(如.mp4)。recursive.bat 文件。【讨论】:
replace.bat 和recursive.bat 放在父目录中,它适用于所有子目录。
将以下 2 个命令保存在 .bat 文件中。它将在所有文件和文件夹中将" " 替换为"_",递归地从存储文件的文件夹开始。
forfiles /s /m *.* /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==FALSE ren @file !Phile: =_!"
forfiles /s /C "cmd /e:on /v:on /c set \"Phile=@file\" & if @ISDIR==TRUE ren @file !Phile: =_!"
注意:第一行是对文件执行此操作,第二行是对文件夹执行此操作。每一行都可以单独使用。
【讨论】:
对 Hamza Rashid 的回答稍作调整。特别是他的 recursive.bat 脚本。
recursive.bat
set orig=%cd%
for /d /r . %%D in (*) do (
copy replace.bat "%%D\replace.bat"
cd "%%D"
replace.bat
del replace.bat
cd %orig%
)
replace.bat 保持不变,说明保持不变。
【讨论】: