От командной строки хранят a “!” от имени файла в varible

У меня есть ряд файлов в папке с именами как test! - 01.avi. Я хочу сделать новую папку для каждого файла с тем же именем и затем переместить файл в ту папку. У меня есть все, но как сдержаться"!" и скопируйте файл в папку.

@ECHO OFF
setlocal enabledelayedexpansion
set "sourcedir=Z:\test"
set folder=null
set file=null
PUSHD %sourcedir%
FOR /f "tokens=* delims=?" %%a in ( 'dir /b /a-d "*[720p].*"'
 ) DO (
  SET file=%%a
  FOR /f "tokens=1,2,* delims=]-" %%b in ("%%a" "[*] * - * [720p].*"
   ) DO (
   FOR /f "tokens=* delims= " %%e in ("%%c"
    ) DO (
     SET folder=%%e
     FOR /l %%f in (1,1,31) do if "!folder:~-1!"==" " set folder=!folder:~0,-1!
     MD "!folder!"
     MOVE "!file!" .\"!folder!"\ 
     )  
    )   
 )
POPD
GOTO :EOF

Спасибо за взгляд

1
задан 27 May 2015 в 03:47
1 ответ

Лучше справиться с именами файлов, отключив отложенное раскрытие . Переменные, назначенные в кодовом блоке ( ) , обрабатываются в подпрограмме следующим образом:

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

set "sourcedir=D:\bat\Unusual Names"
PUSHD %sourcedir%

dir /b /a-d "*!a*.*"

FOR /f "tokens=* delims=?" %%a in ( 'dir /b /a-d "*!a*.*"') DO (

  SET "file=%%~nxa"

  rem observe instructions "make a new folder for each file with the same name"
  rem suppose that without extension
  SET "folder=%%~dpna"

  call :DoDelayedExpansion
)
POPD

ENDLOCAL
goto :eof

:DoDelayedExpansion
  echo(
  echo MD "%folder%\" 2>NUL
  echo MOVE "%file%" "%folder%\" 
goto :eof

Следующий сценарий дает пример только с использованием моего существующего набора тестовых данных. Примечание.

  • используйте синтаксис set "variable = value" с двойными кавычками, чтобы экранировать некоторые символы специального значения в пакетном сценарии, например | , & , <, > и т. Д., И чтобы не было (случайно забытых) конечных пробелов;
  • обе команды MD и MOVE являются просто echo редактируемыми для целей отладки; удалить все echo не раньше, чем будет выполнено отладка.

Вывод :

==>D:\bat\SF\694616.bat
01exclam!ation.txt
02exc!lam!ation.txt

MD "D:\bat\Unusual Names\01exclam!ation\"
MOVE "01exclam!ation.txt" "D:\bat\Unusual Names\01exclam!ation\"

MD "D:\bat\Unusual Names\02exc!lam!ation\"
MOVE "02exc!lam!ation.txt" "D:\bat\Unusual Names\02exc!lam!ation\"

==>

Ресурсы (обязательное чтение):

0
ответ дан 4 December 2019 в 07:36

Теги

Похожие вопросы