如何使用 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
脚本所在的路径。
我正在尝试根据如下所示的 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
脚本所在的路径。