如何将 Windows 批处理脚本的 2 个步骤简化为 1 个步骤 - 有可能吗

如何将 Windows 批处理脚本的 2 个步骤简化为 1 个步骤 - 有可能吗

我创建了一个脚本,它查看一个文件夹,然后创建一个包含信息的新输出文件

我有一个输出文件夹,该文件夹中有文件夹(其文件名为创建时的时间戳,即 201303051158),这些文件夹中有几个文件,其中包含我想要加载到数据库中的信息。

我想在这些数据文件中添加更多信息

rem list files in folders in ts_users and output to a file 3 values, folder, filename     
rem without type and full filename

del c:\ts_users\files_list.txt c:\ts_users\filelocations.txt c:\ts_users\folders_list.txt

cd c:\ts_users\output

for /r %%a in (*) do echo %%a >>c:\ts_users\files_list.txt

FOR /F "tokens=4,5 delims=\" %%a in (c:\ts_users\files_list.txt) do @echo %%a %%b %%~nb >>c:\ts_users\filelocations.txt

输出文件如下所示

201303051158 eu1ptsw001.out  eu1ptsw001 

我想将此信息添加到数据文件的每一行。

数据文件中的一行如下所示:

USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME

mehmet.togrul         rdp-tcp#0           2  Active         41  05/03/2013 05:05

thabo.lesame          rdp-tcp#23          3  Active          6  05/03/2013 05:55

我希望它看起来像这样(不包括第一行)

201303051158 mehmet.togrul         rdp-tcp#0           2  Active         41  05/03/2013 05:05   eu1ptsw001

201303051158 thabo.lesame          rdp-tcp#23          3  Active          6  05/03/2013 05:55   eu1ptsw001

使用批处理文件是执行此操作的最佳方法吗?

答案1

怎么样

setlocal enabledelayedexpansion

for /r %%a in (*) do echo %%a >>c:\ts_users\files_list.txt

FOR /F "tokens=4,5 delims=\" %%a in (c:\ts_users\files_list.txt) do (
     set myOutput=%%a %%b %%~nb
     ::or whatever %%X you want
)

然后在您用来将所有信息回显到日志文件的行上:

echo %whatever_you_are_already_using% %myOutput% >> logfile.extension

我不确定是否enabledelayedexpansion真的需要,但我认为for循环在批处理上有自己的范围,因此它相当于使用static var=。问题set /?是,我这里没有 Windows,我记不清了。您可能需要使用!myOutput!而不是%myoutput%

至于使用批处理来执行此操作...如果您熟悉批处理脚本并且已经做到了这一点...当然,坚持使用它,否则我会使用一些更动态、更简单的语言,如 Python,因为使用批处理操作数据可能会有点过于复杂。我不确定它是否支持正则表达式,但如果它支持,那么使用它而不是所有那些疯狂的for参数将是一个好主意。

相关内容