Batch file 如何在批处理编程中使用通配符?

Batch file 如何在批处理编程中使用通配符?,batch-file,Batch File,我正在尝试使用通配符将某些文件组移动到由组文件名创建的文件夹中。文件名存储在events.txt中。我的批处理文件在最后一行正常运行。显示我的语法不正确 echo off for /F "tokens=*" %%A in (events.txt) do call :makemove %%A pause exit :makemove set f=%1 set file=%f:~0,-4% md X%file% set dest=C:\Users\sony\Desktop\X%file% m

我正在尝试使用通配符将某些文件组移动到由组文件名创建的文件夹中。文件名存储在events.txt中。我的批处理文件在最后一行正常运行。显示我的语法不正确

echo off
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A
pause 
exit

:makemove
set f=%1
set file=%f:~0,-4%  
md X%file%
set dest=C:\Users\sony\Desktop\X%file%
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%"  

后面似乎有空白字符

set file=%f:~0,-4%
线路

这将导致脚本的最后一行计算为

move /y "C:\Users\sony\Desktop\*foobar  *.*" "C:\Users\sony\Desktop\Xfoobar  "

而且会弄乱路径。

后面似乎有空格字符

set file=%f:~0,-4%
线路

这将导致脚本的最后一行计算为

move /y "C:\Users\sony\Desktop\*foobar  *.*" "C:\Users\sony\Desktop\Xfoobar  "

而且会弄乱路径。

正如赫尔布雷德指出的,set file=%f:~0,-4%后面有一个空格。 为了避免此类问题,可以使用SET的扩展语法

设置文件=%f:~0,-4%

周围的引号将确保直到最后一个引号为止的所有字符都是字符串的一部分。 引号本身不是字符串的一部分

所以即使这样也行

set "file=%f:~0,-4%"    the spaces and this text will be removed
引号的另一个积极作用是,它们可以避免文件名中特殊字符的问题,如Cat&Dog

所以你的代码应该是

@echo off
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A
pause 
exit

:makemove
set "f=%~1"
set "file=%f:~0,-4%"
md "X%file%"
set "dest=C:\Users\sony\Desktop\X%file%"
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%"

正如Helbreder指出的,set file=%f:~0,-4%后面有一个空格。 为了避免此类问题,可以使用SET的扩展语法

设置文件=%f:~0,-4%

周围的引号将确保直到最后一个引号为止的所有字符都是字符串的一部分。 引号本身不是字符串的一部分

所以即使这样也行

set "file=%f:~0,-4%"    the spaces and this text will be removed
引号的另一个积极作用是,它们可以避免文件名中特殊字符的问题,如Cat&Dog

所以你的代码应该是

@echo off
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A
pause 
exit

:makemove
set "f=%~1"
set "file=%f:~0,-4%"
md "X%file%"
set "dest=C:\Users\sony\Desktop\X%file%"
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%"

文件变量赋值表达式后面有一个空格-这只是一个post输入错误吗?如果它也存在于脚本中,则会导致错误。在文件变量赋值表达式之后有一个空格-这只是一个后期输入错误吗?如果脚本中也存在,则会导致错误。请注意move命令中%dest%变量后的反斜杠。如果没有它,%dest%将被解释为文件名,而不是目录名。谢谢Helbreder的回答!但它仍然没有解决我的问题。首先,当我在另一个文件夹中使用move命令时,move命令适用于多个文件。我的意思是,这段代码正在工作,但我必须单独输入文件名,我正在尝试避免回声偏移/p file=写入文件名:md X%file%set dest=C:\Users\sony\Desktop\Intern@ONGC\DATA\X%file%move/y C:\Users\sony\Desktop\Intern@ONGC\DATA*%file%*.%dest%pause exit`。但当我使用脚本时,它会显示,文件名、目录名或卷标语法不正确。我认为这与计算机混淆文件名和目录名有关,但我使用的是你提到的反斜杠。如果你能调查一下,那会很有帮助的。PS:我试过你的另一个剧本,但也没用。事实上,我2天前才开始使用batch,所以我不完全理解它,对自己的脚本感觉很舒服。。。我想知道你描述的症状是什么。请仔细检查行集合文件=%f:~0,-4%后是否没有空格。谢谢!成功了。你是个救生员!我在那行后面有一个制表位。但是我仍然不明白空格对脚本有什么影响…请注意move命令中%dest%变量后面的反斜杠。如果没有它,%dest%将被解释为文件名,而不是目录名。谢谢Helbreder的回答!但它仍然没有解决我的问题。首先,当我在另一个文件夹中使用move命令时,move命令适用于多个文件。我的意思是,这段代码正在工作,但我必须单独输入文件名,我正在尝试避免回声偏移/p file=写入文件名:md X%file%set dest=C:\Users\sony\Desktop\Intern@ONGC\DATA\X%file%move/y C:\Users\sony\Desktop\Intern@ONGC\DATA*%file%*.%dest%pause exit`。但当我使用脚本时,它会显示,文件名、目录名或卷标语法不正确。我认为这与计算机混淆文件名和目录名有关,但我使用的是你提到的反斜杠。如果你能调查一下,那会很有帮助的。PS:我试过你的另一个剧本,但也没用。事实上,我2天前才开始使用batch,所以我不完全理解它,对自己的脚本感觉很舒服。。。我想知道你描述的症状是什么。请仔细检查行集合文件=%f:~0,-4%后是否没有空格。谢谢!成功了。你是个救生员!我在那行后面有一个制表位。但是我还是不明白空间对剧本有什么影响。。。