0

我是 Stackoverflow 的新手,所以我希望我把它发布在正确的区域。很长一段时间以来,我一直在寻找我的问题的答案。我正在尝试将一些信息添加到文件的开头。需要信息的文件有一个动态文件名(从不一样,除了前 5 个字符)。您可以在我的代码中看到我在文件中需要的信息。文件原文件名为LBL043629201313114512.DTA。关于文件名的组成是“LB04xxxx。XXXX 是我正在搜索的内容,以确保我获取正确的文件。

我需要输出为原始文件名(LBL......DTA),并在文件开头包含收集的数据。任何帮助都会很棒。

set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
(
    echo %NAME%
    echo %ADDRESS% 
    echo %CITY% %STATE% %ZIP%
    echo %SPECIAL%
) > address.txt
copy address.txt+LBL04%STORE%*.DTA=test.txt
4

2 回答 2

0
@ECHO OFF
SETLOCAL
FOR %%i IN (store name address 
            city state zip 
        special target) DO (SET %%i=)
set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
FOR %%i IN (store name address 
            city state zip 
        special) DO IF NOT DEFINED %%i (SET %%i= )
(
    ECHO.%NAME%
    ECHO.%ADDRESS% 
    ECHO.%CITY% %STATE% %ZIP%
    ECHO.%SPECIAL%
) > address.txt
FOR /f %%i IN (
  'dir /b /a-d /o-d lbl04%store%*.dta'
  ) DO IF NOT DEFINED target SET target=%%i
IF NOT DEFINED target ECHO LBL04%STORE%*.DTA NOT found&GOTO :EOF
copy address.txt+%target%=test.txt >nul
MOVE test.txt %target% >nul

type %target%

显然,您应该首先针对真实数据的副本而不是实时数据尝试此操作。

第一个FOR确保列表中的变量名称从环境中删除,以便如果它们具有现有值然后enter在任何提示处按下,该值将被保留。

第二个FOR循环确保每个输入的变量都有一个值。请注意,target不包含在此组中。=和之间有一个空格)

通过简单的SET指令,空格很重要。语法(SET var=)或等效方法SET "var="确保变量var设置为 [nothing]。问题SET var=是一些编辑器在行上留下终端空间,在这种情况下,var将被设置为那些终端空间——而且它们有点难以看到。此外,SET var =...将设置变量“ var”而不是变量“ var”——但那是另一个故事。

请注意,这些ECHO语句现在在 . 之后直接有一个点ECHO。该语句ECHOECHO将导致ECHO报告其状态,ECHO is off并将出现在输出中。添加“ .ECHO可以让人咀嚼,它会产生超出.

下一条语句中的指令以基本形式(仅文件名)dir生成目录列表,并且不以逆日期顺序生成目录名称。这是一种逐行读取指令输出的机制。下一行“输入”读取的内容应用于每次迭代。因此,遇到的第一个文件名匹配将被 SET 到,并且由于现在已设置,因此任何进一步的行都将因为门而被忽略。/b/a-d/o-dFOR /fdir /b ...%%iLBL04%STORE%*.DTAtargettargetif not defined

如果没有匹配的文件,则target不会被定义(它在第一个for循环中被删除),因此可能会产生错误消息。

否则,将文件连接到test.txt然后move语句实际上replaces是文件“ %target%(我们知道存在)与连接的版本。

最后两行中的>nul每一行都抑制消息“复制/移动了 1 个文件”

任务完成!新文件TYPED作为证据

于 2013-03-30T03:24:48.830 回答
0

只需在末尾添加两行:

del /q LBL04%STORE%*.DTA 
ren test.txt LBL04%STORE%*.DTA

请确保,您不再需要原始 .DTA(更好的是,只要您测试脚本就进行备份

于 2013-03-29T20:13:05.907 回答