Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用BAT进程将信息添加到文件开头,但保持文件名约定_Batch File_Batch Processing - Fatal编程技术网

Batch file 使用BAT进程将信息添加到文件开头,但保持文件名约定

Batch file 使用BAT进程将信息添加到文件开头,但保持文件名约定,batch-file,batch-processing,Batch File,Batch Processing,我是Stackoverflow的新手,所以我希望我能在正确的区域发布这篇文章。我一直在寻找我问题的答案,已经有一段时间了。我试图在文件的开头添加一些信息。需要该信息的文件有一个动态文件名(除了前5个字符外,永远不相同)。您可以在我的代码中看到我在文件中需要的信息。原始文件的文件名为LBL043629201313114512.DTA。文件名的组成是“LB04xxxx”。XXXX是我正在搜索的文件,以确保我获取了正确的文件 我需要的输出是原始文件名(LBL……DTA)与收集的数据在文件的开头。任何帮

我是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

只需在末尾附加两行:

del /q LBL04%STORE%*.DTA 
ren test.txt LBL04%STORE%*.DTA
请确保,您不再需要原始的.DTA(更好的做法是,只要测试脚本,就进行备份)

@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%
显然,您应该首先尝试使用真实数据的副本,而不是实时数据

的第一个
确保从环境中删除列表中的变量名,这样,如果它们有一个现有值,则在任何提示下按
enter
,该值将被保留

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

使用简单的
SET
指令,空格是重要的。语法
(SET var=)
或等效的
SET“var=“
确保变量
var
设置为[无]
SET var=
的问题是,一些编辑器在行上留下了终端空间,在这种情况下,
var
将被设置为这些终端空间-它们有点难以看到。此外,
SET var=…
将设置变量“
var
”而不是变量“
var
“-但那完全是另一回事

请注意,
ECHO
语句现在在
ECHO
后面有一个点。语句
ECHO
ECHO
将导致
ECHO
报告其状态,
ECHO关闭
将出现在输出中。添加“
”会给
ECHO
一些东西,它会产生
之外的行内容

下一条语句中的
dir
指令以
/b
基本格式(仅限文件名)
/a-d
生成目录列表,并且不以日期相反的顺序生成目录名
/o-d
。/f的
是一种逐行读取
dir/b…
指令输出的机制。下一行“输入”读取的内容应用于每次迭代的
%%i
。因此,遇到的第一个匹配
LBL04%STORE%*.DTA
的文件名将被设置到
target
中,由于
target
现在已设置,因此如果未定义
门,任何其他行将被忽略

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

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

最后两行中的每一行上的
>nul
都支持消息“1文件已复制/移动”`


工作完成!新文件
键入
作为证据

除了最后一行的意图(
复制
语句)外,一切都很清楚。
复制
复制指定的文件(在本例中为
地址.txt
),而
+
表示“附加”(不是
字符串
串联,而是
文件内容
串联),并且
=
在copy语句中根本无效(它的存在会导致“无效语法错误”)。换句话说,
copy file1+file2
生成一个文件,该文件的内容为
file1
,后跟
file2
的内容。为了命名新的单个文件,您只需指定另一个文件名:
copy file1+file2 file3
的copy file1+file2=file3'令人惊讶地工作(至少在XP上)
=
是windows cmd中的默认分隔符之一。