0

我已经寻找一种方法来传递位于字符串中的特殊字符,但找不到任何相关的东西。目前,字符串在第一个特殊字符处连接。

for /D /R "%cd%" %%d IN (*) do (call :Write_File "%%~nd")

可以使用转义字符还是我需要一个 for 循环来替换特殊字符,而另一个来替换它们?

该变量应该返回文件夹名称。它返回完整长度的字符串,除非它包含特殊字符 %、&、、、. 等,此时它将返回直到该点的所有内容。示例 B&B 返回 B,而我要求它返回 B&B。

三个示例文件夹名为:“%$”、“01, Copy”和 03&

在读取变量时回显它 (&&echo "%%~nd"): "$%", "01, Copy" 并错过第三个重命名变量中的变量 :Write_File (set "FOLDER=%~1"): "$ ", "01, 复制"

编辑澄清:

特殊字符:%、$、&、*、~ 等。

使用:当回显文件夹名称时,有时会错过特殊字符,有时会完全跳过文件夹。

4

1 回答 1

1

您不能CALL在此处使用值,而是使用对变量的引用。

for /D /R %%d IN (*) do (
  set "myDir=%%~nd"
  call :Write_File myDir
)
exit /b

:Write_File
setlocal EnableDelayedExpansion
set "param1=!%1!"
echo !param1!
endlocal
exit /b
于 2013-07-02T14:00:50.843 回答