windows - 批处理窗口 - 用祖父文件夹名称递归替换所有 csv 的第一列
问题描述
我需要替换文件夹和子文件夹中包含的每个 csv 的第一列中的所有值,并将祖父文件夹的名称放在那里。我得到了这段代码,以在前面需要的步骤中获取祖父文件夹名,并将其放在文件名中。但是,如果我尝试将此信息放在一个变量中,这将清空并在该代码行中使用它是解决它的唯一方法。你能帮我修改我的代码以找到并用祖父母文件夹名称替换单词“XXX”吗?先感谢您
@Echo OFF
FOR /D /R %%# in (*) DO (
PUSHD "%%#"
FOR %%@ in ("*.csv") DO (
for %%I in (..) DO Ren "%%@" "%%~nI%%~xI_%%~n#_%date:/=%%%~x@"
)
POPD
)
Pause&Exit
EDIT1:CSV 结构 (|)
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6|FIELD7|FIELD7|FIELD9|FIELD10|FIELD11|FIELD12|FIELD13|FIELD14|FIELD15
STRINGTOBEREPLACED|A|IT545454|M000000\ABCD|root/SERVER||SQL Service User|Enabled|05/05/2020|ADMIN(root\ADMINS)|ADMIN(root\ADMINS)
STRINGTOBEREPLACED|A|IT545454|M000000\ABCD|root/SERVER||SQL Service User|Enabled|05/05/2020|ADMIN(root\ADMINS)|ADMIN(root\ADMINS)
STRINGTOBEREPLACED|A|IT545454|M000000\ABCD|root/SERVER||SQL Service User|Enabled|05/05/2020|ADMIN(root\ADMINS)|ADMIN(root\ADMINS)
解决方案
警告。此脚本假定您在每个文件中都有标题。同样重要的是要了解csv
文件不能包含!
,因为这将不包括由于delayedexpansion
使用而导致的那些字符。该脚本不会写回原始文件,而是写入临时文件,然后它将替换原始文件。所以我建议你创建一个包含一些csv
文件的测试目录结构并在其中运行脚本,首先在任何实际数据文件上运行它。
请阅读脚本的每个部分,以准确了解它的作用。它通过脚本所在的目录(%~dp0
)递归,因此您需要确保将其放置在路径的正确位置。
@echo off & setlocal enabledelayedexpansion
for /r %%a in (*.csv) do for /d %%i in (%%~dpa..) do (
set header=
set "repl=%%~nxi"
for /f "usebackq delims=" %%x in ("%%~a") do if not defined header set "header=%%x"
(echo !header!)>"%%~dpatemp.txt"
for /f "usebackq skip=1 tokens=1* delims=|" %%c in ("%%~a") do (
set "output=%%~nxi|%%d"
(echo !output!)>>"%%~dpatemp.txt"
)
break>"%%~fa"
move /Y "%%~dpatemp.txt" "%%~fa"
)
推荐阅读
- android - 如何从 Firestore 获取随机文档并将它们显示在不同的 TextView 中?
- c# - Dotnet Core - 如何处理 RNGCryptoServiceProvider()
- windows - 如何使用 Powershell 调用命令?
- python - 用前向填充替换高值
- c - 如何在 Visual Studio 中测量 C 程序的函数堆栈大小?
- c# - 菜单栏 cshtml 没有按我想要的方式显示
- mysql - Mysql 表更新查询很慢而且每天都在增加
- sql-server - 使用 SQL 更新过程在 Windows 应用程序中批量更新数据
- php - MySQL某些字符导致“非法混合排序规则”错误
- powershell - PowerShell 返回 2 作为 2020 年 1 月 6 日的周数