Was*_* A. 2 for-loop space dos batch-file filepath
@echo off
echo processing please wait...
setlocal enabledelayedexpansion
set txtfile=%~dp0mysql\my.ini.bak
set newfile=%~dp0mysql\my.ini
if exist "%newfile%" del /f /q "%newfile%"
for /f "tokens=*" %%a in (%txtfile%) do (
set newline=%%a
echo !newline! >> %newfile%
)
Run Code Online (Sandbox Code Playgroud)
现在my.ini.bak文件位于D:\ Program Files\my.ini.bak
错误:系统找不到文件Files\mysql\my.ini.bak.
如何使这段代码工作,所以它将my.ini.bak中的每一行复制到my.ini
路径中的空间确实阻止FOR/F成功打开文件.您需要围绕文件名引用,但是您还需要FOR/F"USEBACKQ"选项,以便将引用的名称视为文件名而不是文本字符串.
使用"TOKENS=*"
几乎,但不完全相同"DELIMS="
"DELIMS="
保留整条线
"TOKENS=*"
在首先剥离任何前导空格和/或制表符后保留该行的其余部分
"DELIMS="
除非我有理由剥离领先的空间,否则我通常更喜欢.
如果.INI文件有可能包含!
字符,那么您将需要在循环内打开和关闭延迟扩展.%%a
如果包含!
并且启用了延迟扩展,则该值将被破坏.
将整个FOR循环包含在另一组parens中并将输出重定向一次而不是每次迭代一次更有效.它还消除了首先删除文件(如果已存在)的需要.
@echo off
echo processing please wait...
setlocal disableDelayedExpansion
set "txtfile=%~dp0mysql\my.ini.bak"
set "newfile=%~dp0mysql\my.ini"
>"%newfile%" (
for /f "usebackq delims=" %%a in ("%txtfile%") do (
set newline=%%a
setlocal enableDelayedExpansion
rem Presumably more processing goes here
echo !newline!
endlocal
)
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11072 次 |
最近记录: |