我正在尝试通过命令提示符的命令重命名一堆 htm 文件ren
,但没有提供所需的输出。
我有位于不同文件夹中的名为xyz_alb.htm
、 ...等的文件,我想将它们重命名为、等等。xyz_bla.htm
zxy_alb.htm
zxy_bla.htm
我已经尝试过以下代码:
for /r %x in (xyz*.htm) do ren "%x" zxy*.htm
但是它替换了整个文件名,我得到了如下输出:
zxy.htm, zxy.htm...
我该如何修改此代码以获得所需的输出?
我正在所有文件夹和子文件夹中将“NAMU_abl.htm”替换为“KALKINSTA_abl.htm”。
答案1
为此,我使用了免费工具 StExBar,这是一个浏览器扩展。非常方便,功能也更多。信息和下载:斯特克斯巴
答案2
只有当命令本身进行通配符处理时,才能正确解释。您正在使用命令处理通配符,ren xyz*.htm zxy*.htm
因此每次都会看到以下内容:ren
for
ren
ren xyz_alb.htm zxy*.htm
由于没有通配符可以匹配,它不知道使用源文件名的哪部分进行替换,因此它解析为:
ren xyz_alb.htm zxy.htm
因此,您要做的是递归遍历目录,然后在每个目录中执行重命名:
for /d /r %x in (*) do cd "%x" && ren xyz*.htm zxy*.htm
表示/d
仅目录,并且/r
像往常一样递归。 %x
成为目录名称,因此我们切换到每个目录,并且任何与第一个参数匹配的文件都将被重命名。您需要在包含要重命名的文件的第一个文件夹上方启动它。
答案3
尝试了很长时间之后还是没有得到正确的解决方案,所以在同事的帮助下尝试通过 Java 解决,感谢他。
如果有人需要的话,我愿意分享。
import java.io.File;
/**
* This class is search with start file character sequence and replace the file name with new character.
* @author nitin.choube
*
*/
public class SearchAndReplaceFileName
{
public static void main(String[] args)
{
//Parent file path from start searching files
File dir = new File("D:\\WS\\Upload");
// replace character string
final String replaceChar="XYZ";
// replace character string with
final String replaceCharWtih="ALB";
// file extension
final String fileExtension=".htm";
if(dir.isDirectory()){
File[] children = dir.listFiles();
iterateFile(children,replaceChar,replaceCharWtih,fileExtension);
}
}
/**
* This method is allow to search and replace file name.
* @param children
* @param replaceChar
* @param replaceCharWtih
* @param fileExtension
*/
public static void iterateFile(File[] children,String replaceChar,String replaceCharWtih,String fileExtension){
try {
for (int i=0; i<children.length; i++) {
// Get filename of file or directory
File file = children[i];
System.out.println("Getting all files in " + file.getCanonicalPath() + " including those in subdirectories");
if(file.isDirectory()){
File[] child = file.listFiles();
iterateFile(child,replaceChar,replaceCharWtih,fileExtension);
}else if(file.isFile()){
String extension = file.getName().substring(file.getName().lastIndexOf("."));
System.out.println("extracted file name is "+file.getName()+" and extension is ="+extension);
if(extension.equals(fileExtension)){
String fileName=file.getName().substring(0,file.getName().lastIndexOf(fileExtension));
if(fileName.startsWith(replaceChar)){
String newFileName=fileName.replace(replaceChar,replaceCharWtih);
file.renameTo(new File(file.getCanonicalPath().substring(0,file.getCanonicalPath().lastIndexOf("\\"))+"\\"+newFileName+fileExtension));
}else if(fileName.contains("_"+replaceChar+"_")){
String newFileName=fileName.replace(replaceChar,replaceCharWtih);
file.renameTo(new File(file.getCanonicalPath().substring(0,file.getCanonicalPath().lastIndexOf("\\"))+"\\"+newFileName+fileExtension));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}