我注意到在大多数脚本中,两者通常在同一行中:
SETLOCAL ENABLEDELAYEDEXPANSION
Run Code Online (Sandbox Code Playgroud)
这两个实际上是单独的命令,可以写在不同的行上吗?
ENABLEDELAYEDEXPANSION如果脚本设置在脚本的第一行并且在脚本结束之前未禁用,那么设置是否会对脚本产生负面影响?
我有一个日志文件,我需要逐行读入并将该行传递给下一个循环.
首先,我在一个单独的文件中grep日志文件中的"主"字(如"错误") - 以保持它的小.现在我需要获取单独的文件并逐行读取 - 每行需要转到另一个循环(在这些循环中我grep日志并将其分成块)但我卡在这里.
日志看起来像
xx.xx.xx.xx - - "http://www.blub.com/something/id=?searchword-yes-no" 200 - "something_else"
Run Code Online (Sandbox Code Playgroud)
使用for/f循环我只获取IP而不是完整的行.
如何管道/写入/缓冲整行?(每行写什么都没关系)
在 Linux (Bash) 中,有一个非常有用的功能可以将文字文本转储到另一个文件中,如下所示:
cat > see.txt << EOF
contents going into
my file
EOF
Run Code Online (Sandbox Code Playgroud)
我需要的是 Windows 批处理脚本的等效项。我还没有找到内置的这种功能,但我想我可以编写一个子程序来做到这一点(我不想依赖自 XP 以来 Windows 中没有的任何东西),但我遇到麻烦。到目前为止,这是我在各种 来源的帮助下所获得的:
call:catMyChunk myCustomText c:\see.txt
exit /b
goto:myCustomText
This is my test file
Hope you like it.
<got these>
% and these %
! these too
yeah
:myCustomText
:catMyChunk
::Should call this function with 2 args, MYDELIM and outFile.txt
::where is to be catted to outFile.txt
::and text starts with <beginning of line>goto:MYDELIM
::and ends …Run Code Online (Sandbox Code Playgroud) 我想读取一个文本文件并将每一行存储在一个数组中.当我使用下面的代码时,每次"echo %i%"都打印0,只array[0]分配值.但是,在值中"set n=%i%",n值被指定为最后一个递增的I 值."@echo !array[%%i]!"也是打印!array[0]!而不是打印值.代码中是否有语法错误?
set /A i=0
for /F %%a in (C:\Users\Admin\Documents\url.txt) do (
set /A i+=1
echo %i%
set array[%i%]=%%a
)
set n=%i%
for /L %%i in (0,1,%n%) do @echo !array[%%i]!
Run Code Online (Sandbox Code Playgroud) 我在一个文件夹中有3000个文件.我想找到另一个文本并替换它.我怎样才能做到这一点?我是批处理脚本的新手.我可以在1个文件中替换它,但我不知道如何替换多个文件.
FOR /F %%L IN (lala.txt) DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
set "x=!line:E:\Test=E:\Test\Temp!"
echo f | xcopy /E !line! !x!
ENDLOCAL
)
Run Code Online (Sandbox Code Playgroud)
如何编辑我的代码以替换所有文件中的字符串?等待你的帮助.谢谢
我写了一个批处理文件,我想用另一个.txt文件中的字符串覆盖键字符串.
目前它完全复制新的File.txt文件,但不会用OldFile.txt文件中的字符串替换字符串.
File.txt文件中的字符串示例:
...
#密码
PWORD =#AccountName
Account =#TownName
Town =#Postcode
Postcode =#LocationChangedDate
LocationChanged =
我想要替换的OldFile.txt文件中的字符串示例:
...
#密码
PWORD = ABC#AccountName
帐户= 123#TownName
Town = LDN#邮编
邮编= WS77TP#LocationChangedDate
LocationChanged = 01/01/2015
有人可以指出我正确的方向或解释我在哪里犯了错误?
@echo off
setlocal disableDelayedExpansion
::Variables
set InputFile=F:\EXCHANGE\3\Machine\File.txt
set OutputFile=F:\EXCHANGE\3\File-New.txt
set CopyFile=F:\EXCHANGE\3\OldMachine\OldFile.txt
set _strFindPword=Pword=.*
for /F "delims=" %%A in ('findstr /x "Pword=.*" %CopyFile%') do set _strInsertPword=%%A
echo.%_strInsertPword%
set _strFindAccount=Account=.*
for /F "delims=" %%B in ('findstr /x "Account=.*" %CopyFile%') do set _strInsertAccount=%%B …Run Code Online (Sandbox Code Playgroud) 我需要将DLL文件转换为十六进制表示形式,以将其用作字符串的一部分来创建这样的sql服务器程序集
CREATE ASSEMBLY [AssemblyNameHere]
FROM 0x4D5A90000300000004000000FFFF000......continue binary data
WITH PERMISSION_SET = EXTERNAL_ACCESS
由于多种原因,我需要将此文件放入批处理文件中,但似乎FOR语句仅适用于文本文件。
我正在编辑XML文件,大约前10行是注释.并且对于xml注释在表单中
<!-- COMMENT HERE -->
Run Code Online (Sandbox Code Playgroud)
但是当使用我的代码时,它不会输出!mark,它搞砸了xml中的注释.据我所知,ENABLEDELAYEDEXPANSION这样做是因为它认为感叹号正在扩展变量.我怎么能让这个工作?
这是我的代码如下
setlocal ENABLEDELAYEDEXPANSION
set line=0
FOR /f "usebackqdelims=" %%a in ("%filename2%") do (
set /a line = !line!+1
if !line!==39 (echo REPLACED TEXT39>>%tempfile%
)else if(!line!==45 (echo REPLACED TEXT45>>%tempfile%
)else (echo %%a>>%tempfile%
))
Run Code Online (Sandbox Code Playgroud)
EDIT1基本上它应该做的是按原样输出每一行,除非它是39行或45行.它可以工作,除了!评论中的标记不会输出,它们不再是评论.
EDIT2
set line=0
FOR /f "usebackqdelims=" %%a in ("%filename2%") do (
setlocal ENABLEDELAYEDEXPANSION
set /a !line! +=1
echo !line!
if !line!==39 (
echo REPLACED TEXT39>>%tempfile%
endlocal
)else if !line!==45 (
echo REPLACED TEXT45>>%tempfile%
endlocal
)else (
endlocal
setlocal DISABLEDELAYEDEXPANSION
echo …Run Code Online (Sandbox Code Playgroud) 我有一个批处理脚本,可将ping发送到某些PC。可用的PC被写入文本文件,因此每台PC都站在自己的行中。另一个批处理脚本将一些文件复制到PC(目前尝试将其复制到所有PC)。
现在,我想修改脚本,以便该批处理读出文本文件,仅将其复制到可用的PC上,但是如何?
它应该逐行读取文本文件的书面内容,并检查EOF。