使用批处理文件创建包含制表符分隔值的文件

时间:2014-09-02 19:24:52

标签: windows batch-file cmd tsv

我有这个问题,我需要为一些Windows机器解决(所有的Linux工作正常)。我需要翻译脚本以在.bat文件中工作。这是我的脚本(我在机器上的cygmanager中运行并运行,但这对我来说不是一个可接受的解决方案,它需要是本机窗口):

#!/bin/bash

for i in `cat $1`
do fname=$(basename $i)
fbname=${fname%.*}
echo $fbname
done > intermediar.txt

for i in `cat intermediar.txt`
do initial="$(echo $i |head -c 1)" 
 echo $i $i.wim $i.wim $initial '"'`date +%m/%d/%y` "12:00:00"'"' "1" "NULL" "NULL"    "NULL" "NULL"
done > intermediar2.txt

cat intermediar2.txt | awk -F " " '{OFS="\t"; print $1,$2,$3,$4, "09/02/2014   12:00:00",$7,$8,$9,$10,$11}' | sed 's/NULL//g' | tee $2

rm -rf intermediar.txt intermediar2.txt

这个脚本做了什么,或者我需要windows做什么,是:

  1. 列出目录中的所有文件,并创建一个包含所有文件的文件
  2. 在该文件中为所有添加的文件名创建以下制表符分隔的行:

    name of the file without extention (in CAPS)|name of the file with extention (CAPS are not important here)|name of the file with extention (CAPS for the name, no-CAPS for the extention)|first letter of the name of the file|Date and time of the machine (mm/dd/yyyy hh:mm)|1 (just the number 1 for all the rows)|NULL|NULL|NULL|NULL (i put NULL just to indicate that i have 4 colums containing nothing, but they need to exist separated by TAB)
    
  3. 每一行必须以回车值结尾(最后一行除外)。

  4. 如果不明显,这是将数据添加到mssql数据库的文件的一部分。也许我不是唯一一个为此寻求答案的人。所以,感谢所有想要为解决这个问题做出贡献的人!

    后来编辑: 我在这里发布了这个,因为我对cmd一点都不熟练而且我没有尝试任何东西。我不知道如何从批处理/ .bat / windows的角度来解决这个问题,但我试图实现的是一个看起来像[this](http://i.imgur.com/cpw4J9q.png)的文件!非常感谢大家帮忙!

1 个答案:

答案 0 :(得分:0)

虽然可能有多种方法可以实现这一点,但下面是在PowerShell的帮助下使用批处理文件的一种方法 -

@echo off                                       

for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do set TS=%%x                                       

set yyyy=%TS:~0,4%                                      
set mm=%TS:~4,2%                                        
set dd=%TS:~6,2%                                        
set hh=%TS:~8,2%                                        
set min=%TS:~10,2%                                      

setlocal enabledelayedexpansion                                     
for /f "delims=" %%i in ('dir /b /A:-D') do (                                       
    for /f "delims=" %%a in ('powershell -command \"%%~ni\".toupper^(^)') do set fname=%%a                                  
    for /f "delims=" %%b in ('powershell -command \"%%~xi\".tolower^(^)') do set fextn=%%b                                  
    echo !fname!    !fname!!fextn!  !fname!!fextn!  !fname:~0,1!    %mm%/%dd%/%yyyy% %hh%:%min% 1               
)                                   

示例测试输出 -

D:\Scripts>dir /b /a:-d
1.xml
2.jpg
draft1.bat
draft2.bat
input1.csv
input2.csv

D:\Scripts>draft1.bat
1       1.xml   1.xml   1       09/02/2014 22:32        1
2       2.jpg   2.jpg   2       09/02/2014 22:32        1
DRAFT1  DRAFT1.bat      DRAFT1.bat      D       09/02/2014 22:32        1
DRAFT2  DRAFT2.bat      DRAFT2.bat      D       09/02/2014 22:32        1
INPUT1  INPUT1.csv      INPUT1.csv      I       09/02/2014 22:32        1
INPUT2  INPUT2.csv      INPUT2.csv      I       09/02/2014 22:32        1

干杯,G