如何使用 FOR /F 循环重命名基于 CSV 文件的文件?

How to rename files based on CSV file with FOR /F loop?

我正在尝试根据如下所示的 CSV 自动重命名文件:

姓名、全名

John,JohnDoe

简,JaneDoe

乔,JoeDoe

假设我的 .bat 同一个文件夹中有 3 个文本文件,名为 John.txt、Jane.txt、Joe.txt,我想将 John.txt 重命名为 JohnDoe.txt,等等

无论我在重命名中更改多少文件路径,我都会收到“系统找不到指定的文件”。这是我所拥有的基本概要。我在这里做错了什么或者我应该采取什么其他方式来解决这个问题?感谢所有反馈。

@echo off
setlocal enabledelayedexpansion

set csvpath=C:\Users\user1\OneDrive\Documents\BatchExamples\stuff.csv

FOR /F "usebackq skip=1 tokens=1,2 delims=," %%g IN (!csvpath!) do (
    set person=%%g
    set name=%%h

    echo My name is !person! and my full name is !name!

    rename !person!.txt !name!.txt
)

pause

我会这样做:

@echo off

set "csvpath=C:\Users\user1\OneDrive\Documents\BatchExamples\stuff.csv"

FOR /F "usebackq skip=1 tokens=1,2 delims=," %%g IN (`findstr /v /c:":-:-:" "%csvpath%"`) do (
    echo My name is "%%g" and my full name is "%%h"

    rename "%~dp0\%%g.txt" "%%h.txt"
)

pause

此代码更简洁、更健壮,因为文件路径和名称可以包含特殊字符(如 &)而不会破坏脚本。

findstr /v /c:"SEARCHSTRING" "FILEPATH" 告诉 findstr 打印 FILEPATH 中的每一行,不包括带有 SEARCHSTRING 的 (/v) 行。这与您之前的设置相比并没有太大变化,但是更加稳健。

rename命令中,我设置为%~dp0然后是文件名,%~dp0是你的.bat脚本所在的路径。