एक निर्देशिका के माध्यम से लूप के लिए cmd और फ़ाइल नामों से विशेष वर्णों को हटा दें


-1

मैं एक कमांड लाइन स्क्रिप्ट की तलाश कर रहा हूं जो वांछित निर्देशिका में सभी फाइलों के माध्यम से लूप कर सकती है और किसी भी विशेष वर्ण को रिक्त स्थान के साथ फ़ाइल नामों में बदल सकती है। मैं विशेष पात्रों के लिए प्रतिस्थापित तर्क पर अटक गया हूं। कुछ भी नहीं बदलना चाह रहा है (abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789)।

for /r C:\yourdirectorypath %F in (*) do replace(filename, regexp, ' ') 

1
विशेष वर्ण? किस सम्मान में विशेष ? कृपया अपना प्रश्न संपादित करें और उनकी पूरी सूची प्रदान करें।
जोसेफ

मैंने उन पात्रों की एक सूची जोड़ी, जिन्हें मैं रखना चाहता था। इसलिए इसके अलावा कुछ भी प्रतिस्थापित करने की आवश्यकता होगी।
जारेड

जवाबों:


0

अगली .batस्क्रिप्ट मदद कर सकती है। बेहतर समझ के लिए ::या remलाइनों के साथ टिप्पणी की ।

मैं एक regexpसमर्थन में नहीं जानता cmd; इसलिए, उप- रेखा में वर्ण के आधार पर एक विशेष स्ट्रिंग को वर्ण पर आधारित किया जाता है :convrt(यदि %पार्स की आपूर्ति की गई स्ट्रिंग में कोई प्रतिशत चिह्न मौजूद है तो गलत परिणाम नोट करें)।

@ECHO OFF >NUL
@SETLOCAL enableextensions
:: all `echo` lines for debugging purposes only (remove no sooner than debugged)
:::: set "_ALLOWED=abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789"
:::: set "_REPLWITH=-"
:: next setting suffice as '%variable:StrToFind=NewStr%' is case insensitive
set "_ALLOWED=ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-"
:: note a blank space in the above line (with no full stop)
:: note last character of %_ALLOWED% value used to be the replace one as follows
set "_REPLWITH=%_ALLOWED:~-1%"

:: a filename sample (no extension) to be converted 
:: containing some batch-exceptional characters
SET "_sample=AÄaá^ cč^DĎ(1!)&°~!.foo~bar"
call :convrt _ELPAMS _sample

:: next lines show an intentional usage (with no subfolder recursion)  
pushd "D:\bat\Unusual Names"
:: create a particular file of an unusual name: echo _sample "%_sample%">"%_sample%.txt"
for /F "delims=" %%G in ('dir /B "A*.txt"') do (
  echo(
  set "_sample=%%~nG"
  call :convrt _ELPAMS _sample
  call :output "for debugging purposes only"
)
popd

ENDLOCAL
goto :eof

Next :convrt subroutine accepts two parameters (passed by reference):
  %1 (output) variable name
  %2 (input)  variable name
The subroutine will return 
 - any `~` tilde character unchanged "it's not a bug, it's a feature";
 - wrong result for any `%` percent sign present in a file name. 

:convrt
SETLOCAL enableextensions disabledelayedexpansion
set "__auxAll=%~2"
call set "__auxAll=%%%~2%%"
echo sub %~2 "%__auxAll%"
set "__result="
:loop
  if "%__auxAll%"=="" goto :endconvrt
  set "__auxOne=%__auxAll:~0,1%"
  set "__auxAll=%__auxAll:~1%"
  call set "__changed=%%_ALLOWED:%__auxOne%=%%"
  if not "%__changed%"=="%_ALLOWED%" (
    set "__result=%__result%%__auxOne%"
  ) else (
    set "__result=%__result%%_REPLWITH%"
  )
goto :loop

:endconvrt
echo sub %~1 "%__result%"

ENDLOCAL&call set "%~1=%__result%"
goto :eof

:output
  rem echo for _sample "%_sample%"
  echo for _ELPAMS "%_ELPAMS%"
goto :eof

आउटपुट नमूना। %मामले पर ध्यान दें (विचारशील पैचवर्क):

==>D:\bat\SU\921338.bat
sub _sample "AÄaá^ cč^DĎ(1!)&°~!.foo~bar"
sub _ELPAMS "A-a-- c--D--1----~--foo~bar"

sub _sample "AÄaá^ cč^DĎ(1!)&°~!.foo~bar"
sub _ELPAMS "A-a-- c--D--1----~--foo~bar"
for _ELPAMS "A-a-- c--D--1----~--foo~bar"

sub _sample "AÄzž^ yýS%OS%Š%%OS%%(%1!)&°~%%G!^%~2.foo~bar"
sub _ELPAMS "A-z-- y-S%OS%-%%OS%%-%1----~%%G--%~2-foo~bar"
for _ELPAMS "A-z-- y-SWindows_NT-%OS%-_ELPAMS----~%G--_sample-foo~bar"

संसाधन (आवश्यक पढ़ना, अधूरा):

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.