【发布时间】:2011-06-30 05:00:18
【问题描述】:
我指的是下面的威胁Batch files: How to read a file?。用于从文本文件中逐行检索。我正在使用以下脚本:
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ paths.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo !var!
ENDLOCAL
)
代码运行良好! !var! 中的值不能分配给任何变量。 :( 我在那里构造,请任何人帮助逐行阅读,我希望分配给某个变量并想要操纵该变量。请帮助解决这种情况。
更新:
@ECHO off
CLS
SET PROJ_DIR=D:\workspace\proj
SET PROMO_DIR=D:\TEST
SET SOURCE_CODE=\Source Code
SETLOCAL DisableDelayedExpansion
for /f %%a in (paths.txt) do (
SET "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
set FILE_PATH=!var://www.domain.com/path/dir=!
SET FILE_PATH=!FILE_PATH:/=\!
SET PROMO_FILE_PATH=!PROMO_DIR!!SOURCE_CODE!!FILE_PATH!
FOR %%i IN ("!PROMO_FILE_PATH!") DO SET FOLDER_PATH=%%~dpi
FOR %%i IN ("!PROMO_FILE_PATH!") DO SET FILE_NAME=%%~nxi
IF EXIST "!FOLDER_PATH!" GOTO F3
MKDIR "!FOLDER_PATH!"
:F3
IF NOT EXIST "!PROJ_DIR!!FILE_PATH!" GOTO F4
COPY "!PROJ_DIR!!FILE_PATH!" "!FOLDER_PATH!"
:F4
ECHO Cannot find the file under "!PROJ_DIR!!FILE_PATH!"
ENDLOCAL
)
SET CLOSE_CONFIRM=
SET /P CLOSE_CONFIRM=Press any key to close the window...%=%
paths.txt
//www.domain.com/path/dir/dir1/dir2/file1.txt
//www.domain.com/path/dir/dir1/dir2/file2.txt
//www.domain.com/path/dir/dir1/dir2/file3.txt
//www.domain.com/path/dir/dir1/dir2/file4.txt
//www.domain.com/path/dir/dir1/dir3/file1.txt
命令输出
1 file(s) copied.
Cannot find the file under "D:\workspace\proj\dir1\dir2\file1.txt"
1 file(s) copied.
Cannot find the file under "D:\workspace\proj\dir1\dir2\file2.txt"
Press any key to close the window...
谢谢..
【问题讨论】:
-
一个简单的
set "myVar2=!var!"应该可以工作,还是您尝试访问endlocal之后的变量? -
它对我不起作用:(我试过
"myvar2=!var!"然后echo %myvar2%。但是,它没有打印任何东西。它只是打印ECHO is on。我该怎么办?请帮忙关于这个。谢谢 -
分配有效,但您的回显失败,因为百分比扩展仅在执行循环之前完成一次。将其更改为
echo !myvar2! -
您应该显示输入文件和/或将一些调试输出添加到您的代码中,例如
echo !var! !FILE_PATH! -
好吧,我明白了。我希望你能理解我的一段代码。问题是当一个特定文件夹有超过 2 个文件时。它只能复制两个文件,然后终止进程。这就是我的代码的问题。为什么会这样?
标签: batch-file dos