【问题标题】:how do i create multiple txt files name from a column in a CSV file如何从 CSV 文件中的列创建多个 txt 文件名
【发布时间】:2014-10-29 21:44:02
【问题描述】:

这是我正在尝试的代码。它只会创建最后一行。所以我猜其他文件正在被覆盖,尽管我试图移动它们但没有奏效?

for /f "usebackq tokens=1-8 delims=," %%a in ("chassisinfo.csv") do (
set hostname=%%a
set FQDN=%%b
set MGMT=%%c
set SUB=%%d
set gw=%%e
set dns=%%f
set vlan=%%g


echo # Seans scripted installation file > ks_%hostname%.cfg
echo # >> ks_%hostname%.cfg
echo # Accept the VMware End User License Agreement >> ks_%hostname%.cfg
echo vmaccepteula >> ks_%hostname%.cfg
echo # Set the root password for the DCUI and Tech Support Mode >> ks_%hostname%.cfg
echo rootpw >> ks_%hostname%.cfg
echo # The install media is in the CD-ROM drive >> ks_%hostname%.cfg
echo install --firstdisk --overwritevmfs >> ks_%hostname%.cfg
echo keyboard 'United Kingdom' >> ks_%hostname%.cfg

echo network --bootproto=static --device=vmnic0 --ip=%MGMT% --netmask=%SUB% --gateway=%gw% --nameserver=%dns% --vlanid=%vlan% --hostname=%hostname%%FQDN% >> ks_%hostname%.cfg
move ks_%hostname%.cfg d:\KSscripts\



)

【问题讨论】:

  • 请解释您希望它做什么,以及它会做什么。我们不是心灵感应器
  • 它是一个脚本,用于为 CSV 的每一行创建一个 CFG 文件。 cfg 文件由 A 列(主机名)命名。每列都有我在脚本的不同部分使用的不同属性。这做了我想要它做的事情并创建脚本,但仅适用于 CSV 文件中的最后一行。我不知道为什么它会跳过其余的行。尽管我希望它跳过 CSV 的第一行,因为那是标题/标题所在的位置,而不是数据所在的位置。希望更清楚。

标签: batch-file batch-processing batch-rename


【解决方案1】:

由于行中的单个 >,您正在为每一行重新创建文件。

echo # Seans scripted installation file > ks_%hostname%.cfg

将其更改为下面的行。请注意,我还在文件名周围加上引号,以防文件名中有空格。在所有情况下都这样做是个好主意。

echo # Seans scripted installation file >> "ks_%hostname%.cfg"

那么你应该在开始上面代码的第一行之前在该行上放置这样一行,以确保你不会追加到旧文件。

if exist "ks_%hostname%.cfg" del /f /q "ks_%hostname%.cfg"

编辑...要跳过第一行,请将 FOR 语句更改为:

for /f "usebackq tokens=1-8 skip=1 delims=," %%a in ("chassisinfo.csv") do (

【讨论】:

    【解决方案2】:

    您的代码只创建最后一个文件,而是将最后一个值分配给 %hostname% 变量的文件,也就是说,程序第一次运行时它应该创建一个刚刚命名的文件“ks_.cfg”。如果批处理代码没有 SETLOCAL 命令,则第二次和下一次运行它会使用最后一行的名称创建文件。

    原因是%hostname% 变量值在FOR 命令执行之前被扩展一次,所以所有循环都以相同的值执行。您可以通过两种方式解决此问题:使用原始 FOR 可替换参数而不是变量:

    for /f "usebackq skip=1 tokens=1-8 delims=," %%a in ("chassisinfo.csv") do (
    
    echo # Seans scripted installation file > ks_%%a.cfg
    echo # >> ks_%%a.cfg
    
    . . . .
    
    move ks_%%a.cfg d:\KSscripts\
    
    )
    

    或使用延迟扩展:在程序开头插入setlocal EnableDelayedExpansion 命令并将所有%hostname% 扩展更改为!hostname!。更多详情,请在本站查找“延迟扩展”或阅读set /?的说明。

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2016-01-06
      • 2021-09-21
      • 2021-09-17
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多